GmSSL 签名验签-计算Z值


从网上找了很多,都没有写的特别清楚的,gmssl官网还有小bug,特此写如下文档供参考:

运行环境:安装了Gmssl环境的Linux(详见上一篇博客)

 

生成SM2私钥(需要输入密码,最少4位)

$ gmssl sm2 -genkey -sms4 -out sm2.pem

将SM2私钥整数值转换为PEM格式的私钥

$ gmssl sm2 -inform text -out sm2.pem

导出SM2公钥

$ gmssl sm2 -in sm2.pem -pubout -out sm2Pub.pem

显示SM2私钥的Z值

$ gmssl sm2 -genzid -in sm2.pem -id 1234567812345678 -noout

计算带Z值的杂凑值

$ gmssl sm2utl -dgst -in msg.txt -pubin -inkey sm2Pub.pem -id 1234567812345678

对消息签名

$ gmssl sm2utl -sign -in msg.txt -inkey sm2.pem -id 1234567812345678 -out sig.der 

$ gmssl sm2utl -verify -in msg.txt -sigfile sig.der -pubin -inkey sm2Pub.pem -id 1234567812345678

注意,sm2utl是对消息签名,因此支持输入为任意长的消息。pkeyutl也可以进行SM2签名,但是输入是消息的杂凑值

加密解密

$ gmssl sm2utl -encrypt -in msg.txt -pubin -inkey sm2Pub.pem -out enced.der
$ gmssl sm2utl
-decrypt -in enced.der -inkey sm2.pem

和pkeyutl交互

$ gmssl sm2utl -dgst -in msg.txt -pubin -inkey sm2Pub.pem -id 1234567812345678 -out msg.sm3 

$ gmssl sm2utl -sign -in msg.txt -inkey sm2.pem -id 1234567812345678 -out sm2.sig 
$ gmssl pkeyutl
-verify -pkeyopt ec_scheme:sm2 -in msg.sm3 -sigfile sm2.sig -pubin -inkey sm2Pub.pem $ gmssl pkeyutl -sign -pkeyopt ec_scheme:sm2 -in msg.sm3 -inkey sm2.pem -out sm2.sig $ gmssl sm2utl -verify -in msg.txt -sigfile sm2.sig -pubin -inkey sm2Pub.pem -id 1234567812345678
$ gmssl sm2utl -encrypt -in msg.txt -pubin -inkey sm2Pub.pem -out enced.der $ gmssl pkeyutl -decrypt -pkeyopt ec_scheme:sm2 -pkeyopt ec_encrypt_param:sm3 -in enced.der -inkey sm2.pem $ gmssl pkeyutl -encrypt -pkeyopt ec_scheme:sm2 -pkeyopt ec_encrypt_param:sm3 -in msg.txt -pubin -inkey sm2Pub.pem -out enced.der $ gmssl sm2utl -decrypt -in enced.der -inkey sm2.pem
 

SM2数字签名

SM2数字签名方案中被签名的杂凑值不仅仅是消息的杂凑值,而是签名者身份信息串联上消息的杂凑值,其中签名者身份信息是签名者的可辨别标识字串、椭圆曲线方程系数、生成元和签名者公钥串联后字串的杂凑值。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM