windows10 qt5 mingw32编译cryptopp563

参考链接:

http://www.qtcentre.org/threads/28809-Compiling-amp-using-Crypto-with-mingw-version-of-Qt

Compiling & using Crypto++ with mingw version of Qt

Hi pals!

I personally had much trouble with these.

apparently compiled version of crypto++ (cryptopp530win32win64.zip) is build using MSVC and does not work with mingw.

fortunately I could get it to work finally.

so I tell you too, step by step, how to do it.

first download the cryptopp552.zip (crypto++ v5.5.2 sources)

why cryptopp552.zip? apparently this is the latest version that is successfully compiled with mingw.

extract the contents of the cryptopp552.zip to C:\cryptopp552

edit the C:\cryptopp552\fipstest.cpp and replace every 'OutputDebugString' with 'OutputDebugStringA'. (3 replacements in total)

don't forget to save it!

delete the C:\cryptopp552\GNUmakefile

open the Qt command prompt (I used that of the Qt SDK 2009.05)

input the following commands at the Qt command line:

c:

cd \cryptopp552

qmake -project

open the cryptopp552.pro (that is now created in C:\cryptopp552)

in it:

change TEMPLATE = app to TEMPLATE = lib

add a line containing LIBS += -lws2_32 at the end.

type the following commands at the Qt command line:

qmake

mingw32-make all

wait for the build process to finish (may take many minutes)

now we should have files named libcryptopp552.a and cryptopp552.dll in directories C:\cryptopp552\release and C:\cryptopp552\debug

copy the C:\cryptopp552\release\libcryptopp552.a to <Qt dir>\lib

note that there is another directory named lib one level higher in the Qt SDK installation dir. So don't confuse them please.

copy the C:\cryptopp552\release\cryptopp552.dll to <Qt dir>\bin

note that there is another directory named bin one level higher in the Qt SDK installation dir. So don't confuse them please.

create a directory named cryptopp in <Qt dir>\include.

copy all header (.h) files from the C:\cryptopp552 to <Qt dir>\include\cryptopp.

now we can test crypto++ and see how to use it in our Qt programs.

first example is a program that computes an MD5 hash (of a hard coded string):

main.cpp

Qt Code: Switch view

#include <iostream>

#define CRYPTOPP_DEFAULT_NO_DLL

#include <cryptopp/dll.h>

#ifdef CRYPTOPP_WIN32_AVAILABLE

#include <windows.h>

#endif

#include <cryptopp/md5.h>

USING_NAMESPACE(CryptoPP)

USING_NAMESPACE(std)

const int MAX_PHRASE_LENGTH=250;

int main(int argc, char *argv[]) {

CryptoPP::MD5 hash;

byte digest[ CryptoPP::MD5::DIGESTSIZE ];

std::string message = "Hello World!";

hash.CalculateDigest( digest, (const byte*)message.c_str(), message.length());

CryptoPP::HexEncoder encoder;

std::string output;

encoder.Attach( new CryptoPP::StringSink( output ) );

encoder.Put( digest, sizeof(digest) );

encoder.MessageEnd();

std::cout << "Input string: " << message << std::endl;

std::cout << "MD5: " << output << std::endl;

return 0;

}

To copy to clipboard, switch view to plain text mode

code from: http://www.cryptopp.com/wiki/Hash_Functions

remember that you should add these lines to its .pro file before starting to build it:

LIBS += -lcryptopp552

CONFIG+=console

the program should print these on the console window:

Input string: Hello World!

MD5: ED076287532E86365E841E92BFC50D8C

second example is a program that takes 3 arguments at the command line.

arguments are file names.

the program then prompts for a Passphrase and then stores an encrypted version of the first file in the second file and then stores the result of decrypting the second file in the third file.

sample command line I used: release\cryptopptest.exe 1.jpg 2.jpg 3.jpg

Qt Code: Switch view

#include <iostream>

#define CRYPTOPP_DEFAULT_NO_DLL

#include <cryptopp/dll.h>

#include <cryptopp/default.h>

#ifdef CRYPTOPP_WIN32_AVAILABLE

#include <windows.h>

#endif

USING_NAMESPACE(CryptoPP)

USING_NAMESPACE(std)

const int MAX_PHRASE_LENGTH=250;

void EncryptFile(const char *in,

                    const char *out,

                    const char *passPhrase);

void DecryptFile(const char *in,

                    const char *out,

                    const char *passPhrase);

int main(int argc, char *argv[])

{

   try

    {

       char passPhrase[MAX_PHRASE_LENGTH];

       cout << "Passphrase: ";

       cin.getline(passPhrase, MAX_PHRASE_LENGTH);

       EncryptFile(argv[1], argv[2], passPhrase);

       DecryptFile(argv[2], argv[3], passPhrase);

    }

    catch(CryptoPP::Exception &e)

    {

       cout << "\nCryptoPP::Exception caught: "

              << e.what() << endl;

       return -1;

    }

    catch(std::exception &e)

    {

       cout << "\nstd::exception caught: " << e.what() << endl;

       return -2;

    }

}

void EncryptFile(const char *in,

                    const char *out,

                    const char *passPhrase)

{

    FileSource f(in, true, new DefaultEncryptorWithMAC(passPhrase,

                   new FileSink(out)));

}

void DecryptFile(const char *in,

                    const char *out,

                    const char *passPhrase)

{

    FileSource f(in, true,

         new DefaultDecryptorWithMAC(passPhrase, new FileSink(out)));

}

RandomPool & GlobalRNG()

{

    static RandomPool randomPool;

    return randomPool;

}

int (*AdhocTest)(int argc, char *argv[]) = NULL;

To copy to clipboard, switch view to plain text mode

code from: http://www.codeguru.com/cpp/misc/mis...le.php/c11953/

remember that you should add these lines to its .pro file before starting to build it:

LIBS += -lcryptopp552

CONFIG+=console

--------------------------------

I appreciate your feedback.

good luck!

根据上面内容修改,但是编译报错:

'CryptoPP::memcpy_s' has not been declared

修改config.h 打开 CRYPTOPP_WANT_SECURE_LIB的选项

// Define this if you want or need the library's memcpy_s and memmove_s.

//   See http://github.com/weidai11/cryptopp/issues/28.

#if !defined(CRYPTOPP_WANT_SECURE_LIB)

# define CRYPTOPP_WANT_SECURE_LIB

#endif

重新编译,OK!

windows10 qt5 mingw32编译cryptopp563的更多相关文章

  1. Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

    下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...

  2. vs2017+qt5.x编译32位应用<转>

    原文地址:https://www.cnblogs.com/woniu201/p/10862170.html 概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用ms ...

  3. 【Qt开发】vs2017+qt5.x编译32位应用

    概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用msvc2017_x86的插件,然而qt官网并没有提供,只能使用源码编译生成msvc2017_x86插件,使用n ...

  4. 【转帖】嵌入式4412开发板QT5.7编译安装到arm

    QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...

  5. [ffmpeg 扩展第三方库编译系列] 关于libopenjpeg mingw32编译问题

    在mingw32如果想编译libopenjpeg 会比较麻烦 会出现undefined reference to `_imp__opj_destroy_cstr_info@4' 等错误 因此编译时候需 ...

  6. qwt6在Windows下Qt5的编译,安装,初步使用

    今晚把qwt的编译,安装,初级使用放上来,以便需要的人,能更快部署好编程环境,不至于每次都像我这样花很多时间. 注意:Qtcreater使用的是什么编译器编译出来的,就要用那个编译器来编译qwt. 我 ...

  7. QT5.6 编译SQLServer驱动

    简要说下编译的主要步骤 @1:打开vs2015的命令行编译环境 ‘ @2:进入到cd到源码目录:cd C:\Qt\Qt5.6.0\5.6\Src\qtbase\src\plugins\sqldrive ...

  8. QT5静态编译教程,主要针对vs2012(渡世白玉)

    QT5,VS2012静态编译,所有的库准备充分的话qwebkit也可以静态编译通过,但是我编译的版本使用中如果用了QWEBVIEW控件在连接时会出错. 注:我自己编译的环境是:win server 2 ...

  9. 【Qt】Qt5.12编译MySQl5.7驱动(亲自测试成功)

    目录 00. 目录 01. 安装Qt5.12 02. 打开MySQL源码项目 03. 编译MySQL驱动代码 04. 修改mysql.pro文件 05. 编译之后得到对应的库 06. 拷贝动态库到指定 ...

随机推荐

  1. 洛谷P1738 洛谷的文件夹

    原题目:点我 题目是一个略水的题,我机制地用面向对象做了...所以代码量急剧加大,100行233 模拟即可,字符串处理麻烦点.如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹. 提示:高能,指针 ...

  2. boa移植

    1.交叉编译 2.复制文件 配置文件boa.conf 移动到/etc/boa/ 目录下 可执行文件boa移动到/usr/sbin/目录下 3.修改配置文件 4.将Linux系统上/etc/mime.t ...

  3. [php-src]窥探Php内核中的变量

    内容均以php-5.6.14为例. 在看各种组合数据类型之前,有必要先熟悉下 Zend/zend_types.h 里面的自定义数据类型. #ifndef ZEND_TYPES_H // 防止多次 in ...

  4. c# (nop中)下拉列表(有外键)

    第一种情况.view视图加载出来时就有值,实现步骤如下 1.在操作的界面Model中建立public List<SelectListItem> xxx(取名){ get; set; } 2 ...

  5. Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

    一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...

  6. MVC之校验

    MVC校验 首先要在Models中创建几个属性 例子:Id.UserName.Age属性.然后创建控制器,然后添加一个试图,选择强类型,选择支架模板Create生成页面,然后将所有控件改为TextBo ...

  7. jsp_包含指令

    1.静态包含: <%@ include file="被包含的文件的路径"%> 2.动态包含: 不传递参数:<jsp:include page="{要包含 ...

  8. “ExternalException (0x80004005): GDI+ 中发生一般性错误”的问题 .

     原因一般是写入文件时,.net没有该目录的写入权限. 解决方案:增加iis(对aspx而言)对该目录的写入权限.

  9. 10个超级有用、必须收藏的PHP代码样例

    在PHP的流行普及中,网上总结出了很多实用的PHP代码片段,这些代码片段在当你遇到类似的问题时,粘贴过去就可以使用,非常的高效,非常的省时省力.将这些程序员前辈总结出的优秀代码放到自己的知识库中,是一 ...

  10. 业务代码中(java class)中如何实现多线程,并且将子线程中的值随方法返回返回值

    转载自http://bbs.csdn.net/topics/390731832 问题: public static String getAddress(final InputStream inputS ...