Bootstrap

java实现sm2证书基于BouncyCastle

SM2签名同样也是需要先摘要原文数据,即先使用SM3密码杂凑算法计算出32byte摘要。SM3需要摘要签名方ID(默认1234567812345678)、曲线参数a,b,Gx,Gy、共钥坐标(x,y)计算出Z值,然后再杂凑原文得出摘要数据。这个地方要注意曲线参数和坐标点都是32byte,在转换为BigInteger大数计算转成字节流时要去掉空补位,否则可能会出现摘要计算不正确的问题。SM2签名实现如下:

 
 
 
java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 SM2签名
java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 public static BigInteger[] Sm2Sign( byte [] md, AsymmetricCipherKeyPair keypair) java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 { java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 SM3Digest sm3 = new SM3Digest(); java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 ECPublicKeyParameters ecpub = (ECPublicKeyParameters)keypair.Public; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 byte[] z = SM2CryptoServiceProvider.Sm2GetZ(Encoding.Default.GetBytes(SM2CryptoServiceProvider.userId), ecpub.Q); java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 sm3.BlockUpdate(z, 0, z.Length); java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 byte[] p = md; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 sm3.BlockUpdate(p, 0, p.Length); java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 byte[] hashData = new byte[32]; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 sm3.DoFinal(hashData, 0); java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 // e java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 BigInteger e = new BigInteger(1, hashData); java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 // k java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 BigInteger k = null; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 ECPoint kp = null; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 BigInteger r = null; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 BigInteger s = null; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 BigInteger userD = null; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 do java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 { java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 do java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 { java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 ECPrivateKeyParameters ecpriv = (ECPrivateKeyParameters)keypair.Private; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 k = ecpriv.D; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 kp = ecpub.Q; java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 java实现sm2证书基于BouncyCastle - 崔江威 - 崔江威的博客 userD
;