官网:https://www.cryptopp.com
GitHub:https://github.com/weidai11/cryptopp
修改后的820版本 https://github.com/dragonfly1208/cryptopp/tree/cryptopp820
在线文档:https://www.cryptopp.com/docs/ref/index.html
1 生成动态库静态库文件
1.1 VS编译生成 dll和lib 库,版本:cryptopp820
打开 .sln项目,
编译生成:
动态库
静态库:
VS编译生成的库,只能在 Qt+MSVC环境使用。
注:cryptdll 项目的 属性需按如下 设置
参考:Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt
1.2. Qt+MinGW 生成 dll和 .a 库。版本:cryptopp820
参考 Windows下使用MinGW编译Crypto++ 5.6.2
编译和使用Crypto ++(mingw版本的Qt)
.pro 文件添加
win32-g++ {
LIBS += -lws2_32
QMAKE_CXXFLAGS += -msse2 -mssse3 -msse4.1
QMAKE_CXXFLAGS += -mavx2 -m32 -mpclmul -msha -maes
}
在Qt中编译
编译生成:
1.3 Qt+MSVC 生成 dll 库。版本:cryptopp610,Qt调用失败
参考 同上
1.4. crypto++在windows平台上进行android编译 版本:cryptopp820
windows 需先安装cygwin:
安装binutils 、gcc 、make 、gdb
注意setenv-android-gcc.sh 文件中 变量 AOSP_API_VERSION
对应的安卓版本一定要低于或等于和测试的安卓机的版本
# AOSP_API_VERSION="19" # Android 4.4 and above
# AOSP_API_VERSION="21" # Android 5.0 and above
# AOSP_API_VERSION="23" # Android 6.0 and above
#修改 GNUmakefile-cross 文件 注释掉 default,生成 .so
# Default builds program with static library only
#.PHONY: default
#default: cryptest.exe
.PHONY: all static dynamic
all: static dynamic cryptest.exe
#Cygwin64 执行的命令
export PATH=/cygdrive/d/ProgramFiles/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin:$PATH
source ./setenv-android-gcc.sh armeabi-v7a
make -f GNUmakefile-cross
2. 使用库 文件
2.1 crypto++ 的VS +MSVC静态库版本(1.1)
2.1.1 crypto++ 生成的VS+MSVC 静态库可以在 VS上使用。
例子:Crypto++库 md5算法的使用
Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
2.2 Qt+MinGW 动态库 (1.2),和 Android(armeabi-v7a)+ android-ndk-r17c动态库(1.4)
动态库:
头文件:尽可能多
.pro 文件添加
INCLUDEPATH += $$PWD/cryptopp/
win32-g++{ #MinGW
LIBS += -L$$PWD/lib/ -lcryptopp820
}
android-g++{ #Android_ARMv7 android-g++
LIBS += -L$$PWD/lib/ -lcryptopp
}
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
DISTFILES += \
android/AndroidManifest.xml #文件中可设置Android 版本等信息
ANDROID_PACKAGE_SOURCE_DIR = \
$$PWD/android
ANDROID_EXTRA_LIBS = #Android dynamic lib
$$PWD/lib/libcryptopp.so
}
win32-msvc{ # VS+MSVC
win32: LIBS += -L$$PWD/lib/ -lcryptopp
#LIBS += $$PWD/rdrand-x86.obj
SOURCES += \
cryptopp/md5.cpp
HEADERS += \
cryptopp/md5.h
}
直接测试 2.1.1的MD5代码即可MinGW+Qt 需要将.dll 放在 exe 相同目录下
2.3 crypto++ 的VS +MSVC动态库版本(1.1):dll+lib
由于生成动态库只包含crypto++核心代码和部分加密工具比如:sha,如果要使用其他加密工具比如:MD5,需要在工程项目中添加对应加密工具的 头文件和cpp文件。
如果报错:“LNK2019: 无法解析的外部符号”,需要添加 #include “dll.h” 定义 #define CRYPTOPP_IMPORTS
2.3.1 Qt+MSVC使用
2.3.3 VS+MSVC使用
2.3.4 将MD5添加进动态库文件中
如果想将MD5加密工具添加入动态库中,需将MD5相关的源码添加到cryptdll 动态库项目中,并修改头文件:
添加CRYPTOPP_DLL
2.4 测试代码
//#include "dll.h" //MSVC动态库 需要放开
//#include "cryptlib.h"
//#include "filters.h"
//#include "pkcspad.h"
#include "md5.h"
#include "sha.h"
#include <iostream>
using namespace CryptoPP;
using namespace std;
//#pragma comment (lib,"cryptlib.lib")
int Sha1();
int main()
{
byte message[] = {49,49,49,49};
byte m[16];
MD5 md5;
md5.Update(message,4);
md5.Final(m);
std::cout<<"算法名称:"<<md5.AlgorithmName()<<endl;
for(int i=0;i<16;i++)
{
printf("%02x",m[i]);
}
printf("\n");
Sha1();
return 0;
}
int Sha1()
{
byte message[] = {49,49,49,49};
byte m[16];
CryptoPP::SHA1 hash;
const int size = CryptoPP::SHA1::DIGESTSIZE;
byte digest[size];
hash.CalculateDigest(digest, message, 4);
std::cout<<"算法名称:"<<hash.AlgorithmName()<<endl;
for(int i=0;i<size;i++)
{
printf("%02x",digest[i]);
}
printf("\n");
return 0;
}
标签:Qt,lib,++,VS,MSVC,android
From: https://www.cnblogs.com/lidabo/p/18338373