实验一-密码引擎-商用密码算法实现2-交叉测试(选做)
实验一-密码引擎-商用密码算法实现2-交叉测试(选做)
任务详情
把自己实现的商用密码算法SM2,SM3,SM4与OpenSSL交叉验证
-
自己实现的SM3算法的结果与OpenSSL的结果比对是否一致
-
自己实现的SM4算法加密的,OpenSSL的SM4算法解密,或者相反
-
自己实现的SM2算法签名,OpenSSL的SM2算法验签,或者相反
1 提交代码链接和运行结果截图
2 记录实现过程中的问题和解决方案
3 推荐发博客提交链接
码云链接
https://gitee.com/ruiruiruiruirui/xx/tree/master/smx
一、自己实现的SM3算法的结果与OpenSSL的结果比对是否一致
在Ubuntu下编程计算我的学号的sm3哈希值
gcc *.c -o 20191220sm3
在windows下使用openssl计算
dgst -sm3 20191220.txt
发现结果并不一样,其实是要用-m32 生成32位机器的汇编代码
输入指令
gcc -m32 *.c -o 20191220sm3
编译运行
得到一样的sm3哈希值
二、自己实现的SM4算法加密的,OpenSSL的SM4算法解密,或者相反
在Ubuntu中原文密钥和加密后如下
用openssl重现SM4加密,加密的原文和密钥均为0123456789abcdeffedcba9876543210
将原文改成十六进制文件再进行操作,使用winhex
openssl enc -sm4-ecb -in 20191220sm4_1.txt -K 0123456789abcdeffedcba9876543210 -out 20191220sm4_2.txt
查看20191220sm4_2.txt
加密成功
进行解密
openssl enc -d -sm4-ecb -in 20191220sm4_2.txt -nopad -K 0123456789abcdeffedcba9876543210 -out 20191220sm4_4.txt
解密成功
但是多出了一行,分析后认为是文件结束符也被加密了
所以在指令中再加入参数 -nopad 不使用补齐
加密
openssl enc -sm4-ecb -in 20191220sm4_1.txt -nopad -K 0123456789abcdeffedcba9876543210 -out 20191220sm4_3.txt
再进行解密
openssl enc -d -sm4-ecb -in 20191220sm4_3.txt -nopad -K 0123456789abcdeffedcba9876543210 -out 20191220sm4_4.txt
成功解密