一、正常大家理解的SM2算法
1、SM2公钥 64个字节 : X + Y ,X和Y各32个字节
2、SM2私钥 32个字节
3、SM2签名 64个字节: R+S,R和S各32个字节
4、SM2加密后密文:
C1 + C3 + C2,C1为X+Y 64个字节,C3为Hash 32个字节,C2为密文(长度与明文等长)
二、各类算法库的SM2算法
首先,理解什么是压缩和非压缩,即上面所说为非压缩,如下为压缩
1、针对SM2公钥,存在两种压缩形态
03 + X 或 02 + X ,总共33个字节,前缀03或02 取决于Y
为什么会出现压缩形态,因为SM2曲线方程式是确认的,即y^2=x^3+ax+b
a、b的值在标准SM2算法参数里面已知,因此给定x就能计算得到y
2、因为SM2公钥存在两种压缩形态,因为针对SM2加密后密文,也有两种压缩可能性,即
C1( 03 + X ) + C3(32个字节)+ C2 ,假定C2长度为16个字节,则该总长度为81个字节
C1( 02 + X ) + C3(32个字节)+ C2 ,假定C2长度为16个字节,则该总长度为81个字节
3、非压缩的公钥标准长什么样?
非压缩公钥正常形态为04 + X + Y,由于各个算法库差异,04有时候会省略(64个字节或含04的65个字节),默认为非压缩(含04开头)。
非压缩密文正常形态为04 + C1 + C3 + C2 ,假定C2长度为16个字节,则该总长度为113个字节(含04开头)。