SM2Java
SM2Java copied to clipboard
大数在转化为byte数组时会溢出一位
BigInteger 在转化为byte数组时会会出现一个补位
BigInteger 在转化为byte数组时会会出现一个补位,导致最后的sm3-Hash的计算作物,ZA计算错误
需要在计算sm3杂凑值时,做如下处理
byte[] array = bigInteger.toByteArray();
if (array[0] == 0) {
byte[] tmp = new byte[array.length - 1];
System.arraycopy(array, 1, tmp, 0, tmp.length);
array = tmp;
}
SM2.java中的byte[] ZA(String IDA,Ecpoint aPublicKey)中处理
//这一行的sm3hash中的参数都要做上面的处理
byte[] ZA=sm3hash(............................);
IDA
USERID说明
请参阅SM2椭圆曲线公钥密码算法-P54 用户其他信息一栏。 USERID非IDa
设用户A的身份是:[email protected]。用ASCII编码记ID A :
414C 49434531 32334059 41484F4F 2E434F4D。ENTL A =0090。
https://github.com/hyfree/SM2_SM3_SM4Encrypt/tree/add_pdf/pdf
#9
正确。有好几处都要处理。
现在有2012国密规范了,sm2加密部分与2010版的略微不同。网上的部分大部分是2010规定写的。
另外注意一下国密推荐参数的问题
2012规范和2010规范能相互加解密吗?
不能
c1c2c3顺序不一样
需要调整c1c2c3的顺序