实验一 密码引擎-4-国䀄算法交叉测试
一、任务详情
0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名
1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
2 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
3 在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图
4 加分项:在Windows中重现上述过程
二、在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密
1.openssl SM4加密
openssl enc -sm4 -in 20201212-20201220.txt -out encrypt.txt -pass pass:12345
2.openssl SM4解密
openssl enc -d -sm4 -in encrypt.txt -out decrypt.txt -pass pass:12345
3.gmssl解密
gmssl enc -sms4 -d -in encrypt.txt -out decryptGM.txt -pass pass:12345
三、在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
到openssl的apps文件夹下,输入命令如下所示:
./openssl ecparam -genkey -name SM2 -out priv.key
./openssl ec -in priv.key -pubout -out pub.key
./openssl ecparam -genkey -name SM2 -out all.key
四、在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签
(一)使用OpenSSL用SM3算法计算上述文件的Hash值
openssl dgst -sm3 20201212-20201220.txt
openssl sm3 -binary -out dgst.txt 20201212-20201220.txt
3b28c5acf24eb2419f0cae47f7509ab7a553e275f59070017bd37ca2700d6c12
(二)用sm2的公私钥对进行签名、验签:
openssl pkeyutl -sign -inkey all.key -in dgst.txt -out signature.bin
openssl pkeyutl -verify -in dgst.txt -sigfile signature.bin -inkey all.key
(三)Gmssl下证书的生成
http://www.javashuo.com/article/p-ejpehuti-u.html
https://blog.csdn.net/weixin_30877227/article/details/97106010
1.生成SM2密钥对
gmssl sm2 -genkey -out cakeyGM.pem
2.生成SM2自签名证书
gmssl req -new -x509 -key cakeyGM.pem -out cacertGM.crt
3.生成SM2用户密钥对
gmssl sm2 -genkey -out uGM.com.key
4.生成证书请求csr
gmssl req -new -key uGM.com.key -out uGM.com.csr
5.用CA进行签名
gmssl ca -in uGM.com.csr -out uGM.com.crt -cert cacertGM.crt -keyfile cakeyGM.pem
6.验证签名
gmssl verify -verbose -x509_strict -CAfile cacertGM.crt uGM.com.crt
7.生成证书文件
gmssl pkcs12 -export -in cacertGM.crt -inkey cakeyGM.pem -out lhRootCA.p12
五、加分项:在Windows中重现上述过程
六、问题及解决
1.运行不了openssl sm2 -sign private_key.pem -in dgst.txt -out signature.bin
如果您在命令行中输入openssl sm2 -sign private_key.pem -in dgst.txt -out signature.bin
,会显示以下错误信息:
Error: 'sm2' is an invalid command.
这是因为OpenSSL并没有提供名为“sm2”的单独命令。SM2算法可以与其他命令一起使用,例如:openssl dgst
和openssl pkeyutl
等。
要使用SM2签名,请使用以下命令:
openssl dgst -sm3 -sign private_key.pem -out signature.bin dgst.txt
其中,-sm3
指定使用SM3哈希算法进行摘要计算,-sign private_key.pem
指定使用private_key.pem文件中的私钥进行签名,-out signature.bin
指定输出签名结果到signature.bin文件中,最后的dgst.txt
是待签名的数据文件。