首先,Qt沒有封裝加解密算法庫(其實有個哈希函數的函數)。介於OpenSSL函數封裝不友好,以及先前爆發的心臟滴血漏洞廣受詬病,我們考慮在C++上使用一種新的,並且封裝友好的,OOAD程度更高的加解密算法庫Crypto++。
筆者此篇文章發布前官方已更新到5.6.5版本。官網:https://www.cryptopp.com.API參考文檔網址:https://www.cryptopp.com/docs/ref/
從官網下載好后,解壓,由於自帶了VC的項目文件,所以使用Visual Stdio部署比較容易,網上教程也很多。這里我們介紹在Qt上的部署問題。主要問題在於使用mingw編譯該源碼。在linux上也能很好的解決問題。
1.下載cryptopp565.zip。筆者已經成功通過mingw編譯。
解壓cryptopp565.zip to D:\cryptopp(或者D:\cryptopp565)
2.接下來很重要!!!使用記事本或者其他文本編輯器編輯D:\cryptopp\fipstest.cpp文件,將其中的每一個‘OutputDebugString’都替換為 'OutputDebugStringA'(一共三個地方替換)。記得要保存!記得要保存!記得要保存!
3.刪除D:\cryptopp\GNUmakefile文件(不然之后的編譯會報錯)
4.打開Windows控制台,這里切換目錄到crypto++庫目錄,輸入如下命令即可
D:
cd \cryptopp
qmake -project
此時該目錄下會產生cryptopp.pro文件。絕對路徑為D:\cryptopp\cryptopp.pro
5.這里我們使用QtCreator打開cryptopp.pro。也可使用文本編輯器直接打開。
將第一行的
TEMPLATE = app 修改為 TEMPLATE = lib
並且在最后添加一行:LIBS += -lws2_32
6.在控制台中輸入下列命令進行編譯
qmake
mingw32-make all
7.等待編譯結束 (通常需要幾分鍾)4-6步命令的截圖如下圖:
8.之后編譯完成后,我們需要拷貝生成的兩個文件
1)D:\cryptopp\release\libcryptopp552.a 拷貝到 <Qt dir>\lib
2)D:\cryptopp552\release\cryptopp552.dll拷貝到<Qt dir>\bin
這里<Qt dir>代表你自己的Qt安裝目錄
9.在<Qt dir>\include下創建一個名字為cryptopp的文件夾
從D:\cryptopp拷貝所有頭文件header (.h)到 <Qt dir>\include\cryptopp.
10.現在我們在Qt工程里測試下crypto++庫
計算md5哈希值:
main.cpp
1 #include <iostream> 2 3 #define CRYPTOPP_DEFAULT_NO_DLL 4 #include <cryptopp/dll.h> 5 #ifdef CRYPTOPP_WIN32_AVAILABLE 6 #include <windows.h> 7 #endif 8 #include <cryptopp/md5.h> 9 10 USING_NAMESPACE(CryptoPP) 11 USING_NAMESPACE(std) 12 const int MAX_PHRASE_LENGTH=250; 13 14 int main(int argc, char *argv[]) { 15 16 CryptoPP::MD5 hash; 17 byte digest[ CryptoPP::MD5::DIGESTSIZE ]; 18 std::string message = "Hello World!"; 19 20 hash.CalculateDigest( digest, (const byte*)message.c_str(), message.length()); 21 22 CryptoPP::HexEncoder encoder; 23 std::string output; 24 encoder.Attach( new CryptoPP::StringSink( output ) ); 25 encoder.Put( digest, sizeof(digest) ); 26 encoder.MessageEnd(); 27 28 std::cout << "Input string: " << message << std::endl; 29 std::cout << "MD5: " << output << std::endl; 30 31 return 0; 32 }
這一步很關鍵,否則會報錯!! 在.pro文件里最后添加下列兩行!
LIBS += -lcryptopp552
CONFIG+=console
接下來程序屏幕會顯示:
Input string: Hello World!
MD5: ED076287532E86365E841E92BFC50D8C
出現這個代表測試成功,部署完成。