LittleRookie_Avalon

Qt 5.8.3 部署/添加 Crypto++第三方库(5.6.5版本)

首先,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

Qt Code:
 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

出现这个代表测试成功,部署完成。

posted on 2017-06-03 16:07  LittleRookie_Avalon  阅读(3676)  评论(0编辑  收藏  举报

导航