首页 > 其他分享 >Qt 和 VS 使用 crypto++

Qt 和 VS 使用 crypto++

时间:2024-08-02 11:29:24浏览次数:6  
标签:Qt lib ++ VS MSVC android

官网: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)

SSE优化指令集编译 + Intel官方指令集向导

.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

参考 ubuntu移植crypto++到Android平台

注意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

相关文章

  • Qt项目——文本编辑器(功能模块④)
    项目地址:GitHub-Outlier9/CatEditor:Cat文本编辑器--Qt有帮助的话各位点点star啦,感谢!如果有需要学习该项目的人,觉得看文档较为困难,可以加我联系方式,给github点个star后可免费提供学习视频!!!(11)字体颜色文字设置颜色操作,在.ui界面对colorAction转到槽,选triggered信号,然......
  • C/C++ 运算符优先级相关的注意事项
    在C/C++中,运算符优先级决定了表达式中各部分的计算顺序。理解并正确应用运算符优先级是确保程序逻辑正确性的关键。以下是关于C/C++运算符优先级相关的一些重要注意事项:优先级层次:C/C++中的运算符按优先级从高到低排序。例如,算术运算符(+、-、*、/)的优先级高于赋值运算符(=)......
  • 在 VS Code 中 - 有没有办法以通常的“(env_name)”样式显示自动激活的环境?
    我的自动环境激活工作正常,它只是在终端中看起来很难看(参见屏幕截图)-有人知道如何更改它吗?我想将它放在括号中,并在下一个命令之前有一个空格:)任何非常感谢提示!这是我可以在VSCode端更改的内容,还是它是bash脚本,还是这是预期的行为而我无法更改它?很不幸,......
  • VSCode编译运行和调试C++
    VSCode编译运行和调试C++欢迎关注我的B站:https://space.bilibili.com/379384819欢迎交流学习,vx:18074116692参考教程:详解Linux下使用vscode编译运行和调试C/C++-知乎(zhihu.com)vscode是文本编辑而非集成开发环境,需要经过配置才能在其上编译执行代码。本教程将介绍如下内容......
  • TpmVscMgr.exe 命令行工具让具有管理凭据的用户能够在计算机上创建和删除 TPM 虚拟智
     tpmvscmgr|MicrosoftLearn tpmvscmgr命令行工具让具有管理凭据的用户能够在计算机上创建和删除TPM虚拟智能卡。 tpmvscmgrTpmVscMgr.exe 命令:    create        [/quiet]        /name<名称>       ......
  • C++和C语言if else
    一、if。if(/*表达式*/)//如果表达式成立,执行大括号里的代码。如果表达式不成立,执行大括号下面的代码。{//代码}二、else。 else//else一般和if配对,如果if表达式不成立,执行else。如果if表达式成立,不执行else{//代码} 所以执行如上代码输出的是"1是单数"。......
  • C++入门基础
    文章目录一、C++的由来1、C++的起源2、C++的版本更新二、C++的第一个程序三、命名空间1、namespace的价值2、namespace的定义3、命名空间的使用四、C++输⼊&输出五、缺省参数六、函数重载七、引用1、引用的概念和定义一、C++的由来1、C++的起源C++的起源可......
  • VSC环境配置(QT)
    VisualStudioCode1.QT安装系统:win10安装准备:官网下载qt-online-installer-windows-x64.exe在线安装程序QT账户申请个人免费版选择版本:勾选Archive并筛选选择对应组件若是自己下载MinGW,需要使用posix版本,实测5.3、7.3和8.1posix版本均可使用,为了保持一致性......
  • Log4cplus导入QT5(VSCode)
    下载GitHub地址:https://github.com/log4cplus/log4cplus版本选择log4cplus-2.0.2编译环境搭建完成后即可CMake编译生成预编译库,可参考该项目README.md进行功能选择导入在实际工程CMakeLists.txt中导入头文件(库include目录),并链接预编译好的.dll文件到项目中运行及调试la......
  • C++类的组合和类的继承的区别
    C++类的组合和类的继承的区别类的组合:类的组合是一种将一个类的对象作为另一个类的成员变量的设计方式。classEngine{public:Engine(){/*...*/}~Engine(){/*...*/}};classCar{private:Engineengine;//Engine的构造函数和析构函数将被调用......