sm-crypto icon indicating copy to clipboard operation
sm-crypto copied to clipboard

前端正常加解密,java无法解密

Open bainliu opened this issue 3 years ago • 13 comments

前端用Java后端传递的16进制公钥正常加解密,后端拿到前端给的密文无法解密。 但是用https://github.com/Saberization/SM2所生成的密文,后端可以正常解密。但是没有前端解密的方法。 密文是 16进制格式

bainliu avatar Mar 11 '21 14:03 bainliu

后端用的国密工具是gmhelper,还是自己封装的bouncycastle?如果是前者,那么可能是cipherMode没有选对,或者密文不是以0x04字节开头

human-user avatar Mar 16 '21 07:03 human-user

根据标准,密文前面需要加上0x04

fanthos avatar Mar 26 '21 02:03 fanthos

大佬好, 请教一个问题 , 我使用的是c#后端 同秘钥情况下,前后都能加解密,但是就是不能交叉加解密 这是为啥呢,有什么解决办法吗

756616071 avatar Apr 02 '21 02:04 756616071

@756616071 看看密文第一个字节是不是0x04

fanthos avatar Apr 02 '21 02:04 fanthos

在后端看是不是 0x40吗

756616071 avatar Apr 02 '21 02:04 756616071

不兼容有几个常见问题,比如第一个字节有0x04,C1C2C3/C1C3C2,需要查文档

fanthos avatar Apr 02 '21 02:04 fanthos

image

756616071 avatar Apr 02 '21 02:04 756616071

没有 0x40

756616071 avatar Apr 02 '21 02:04 756616071

后端使用的是c1c2c3

756616071 avatar Apr 02 '21 02:04 756616071

@756616071 看源码,两边的标准必须一样

fanthos avatar Apr 02 '21 03:04 fanthos

标准指的是字符串标准吗

756616071 avatar Apr 02 '21 03:04 756616071

请问这个问题解决了吗?我也遇到了,nodejs 加密解密正常,java 那边解密失败;java 给的密钥是 16位的,我转成 32位的 hex 进行加密,但是 java 解密不了

lwmxiaobei avatar Apr 19 '22 06:04 lwmxiaobei

给后来的兄弟提醒下,一般后端是以04开头密文来解密的, 该库没有属于去除04的,解密是库的函数自动加上的, 其他的后端库如go,属于密文必须04开头的,所以需要在传给后端密文时候手动加上04

herbertxy avatar Feb 01 '24 03:02 herbertxy