近来项目中需要使用加密算法,对上/下位机之间的消息进行加密。客户要求使用国密算法库,不能使用国际上通用的AES、RSA等算法。
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
其中SM1没有开源,其他的均开源。
源码编译
开源的国密算法全网满天飞,C语言实现到处都是。
调研发现有一个清华的开源库(GMSSL)可用,而且支持大多数国密算法,最新版本也不太老(2022),所以选择GMSSL库。
下载的版本:
其中EXE安装程序是编译好的64bit版本,因为我使用的是QT MinGW-32bit编译器,所以稍微麻烦一点,需要自己编译32bit版本。
选择32bit的工具:
编译GMSSL源码参考博客:
VS2022引入GMSSL
64bit版本
32bit版本
32bit必须把dll动态链接库拷贝到exe所在目录才能运行,64bit不是必须。
结果:
QT5中引入GMSSL库
本地安装的是qt5.14.2\mingw73_32,只能使用32bit版本。
在项目上右键-添加库
外部库
编译成功后运行,使用SM1输出解密后的明文: