解决对接JAVA SM2加密遇到的坑
仔细核对之后发现,这个java模块有几个地方并不符合GB/T32891的标准。而C1是密文的一部分,所以有了私钥d便可以进行解密。这里的P、G、C1、C4是椭圆曲线上的点,点的乘法只具有几何意义上,并非2X3=6的算术运算。Java中,BigInteger的最高位为1时,toByteArray()得到的字节数组会多一位,在前面多了一个为0的字节,应该是要表示为正数。导致运算结果和其他语言的不一致。而在这个库中,并没有进行正则化的操作,导致加密结果无法与其他程序进行交互,除非对方也使用的bouncycastle库,可实现方式与其类似。给出我的SM2数字签名算法代码Java实现,所属文件SM2Signer.java
用户评论