zoukankan      html  css  js  c++  java
  • 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:cryptoppfipstest.cpp文件,将其中的每一个‘OutputDebugString’都替换为 'OutputDebugStringA'(一共三个地方替换)。记得要保存!记得要保存!记得要保存!

    3.删除D:cryptoppGNUmakefile文件(不然之后的编译会报错)

    4.打开Windows控制台,这里切换目录到crypto++库目录,输入如下命令即可
    D:
    cd cryptopp
    qmake -project

    此时该目录下会产生cryptopp.pro文件。绝对路径为D:cryptoppcryptopp.pro

    5.这里我们使用QtCreator打开cryptopp.pro。也可使用文本编辑器直接打开。
    将第一行的
    TEMPLATE = app 修改为 TEMPLATE = lib

    并且在最后添加一行:LIBS += -lws2_32

    6.在控制台中输入下列命令进行编译
    qmake
    mingw32-make all


    7.等待编译结束 (通常需要几分钟)4-6步命令的截图如下图:


    8.之后编译完成后,我们需要拷贝生成的两个文件

      1)D:cryptopp eleaselibcryptopp552.a 拷贝到 <Qt dir>lib
      2)D:cryptopp552 eleasecryptopp552.dll拷贝到<Qt dir>in
    这里<Qt dir>代表你自己的Qt安装目录

    9.在<Qt dir>include下创建一个名字为cryptopp的文件夹
    从D:cryptopp拷贝所有头文件header (.h)到 <Qt dir>includecryptopp.

    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

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

  • 相关阅读:
    git查看历史提交修改了哪些文件
    修改docker0默认IP地址
    php-fpm开启慢日志
    docker-desktop for windows修改docker镜像文件存放位置
    composer更换镜像源
    zip命令分卷压缩
    php增强一个类通常有4中途径
    解决 WPS for Linux 提示“系统缺失字体”
    SpringMvc + Mybatis项目中 使用 Atomikos实现分布式事务
    Log4j 配置某个类中某个方法的输出日志到指定文件
  • 原文地址:https://www.cnblogs.com/AvalonRookie/p/6937587.html
Copyright © 2011-2022 走看看