JuneAndGreen / sm-crypto

国密算法js版
MIT License
943 stars 255 forks source link

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

Open bainliu opened 3 years ago

bainliu commented 3 years ago

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

human-user commented 3 years ago

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

fanthos commented 3 years ago

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

756616071 commented 3 years ago

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

fanthos commented 3 years ago

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

756616071 commented 3 years ago

在后端看是不是 0x40吗

fanthos commented 3 years ago

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

756616071 commented 3 years ago

image

756616071 commented 3 years ago

没有 0x40

756616071 commented 3 years ago

后端使用的是c1c2c3

fanthos commented 3 years ago

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

756616071 commented 3 years ago

标准指的是字符串标准吗

lwmxiaobei commented 2 years ago

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

herbertxy commented 8 months ago

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