近來專案中需要使用加密演算法,對上/下位機之間的訊息進行加密。客戶要求使用國密演算法庫,不能使用國際上通用的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輸出解密後的明文: