QT适配OpenSSL库的保姆级教程

Gallagher_SF 2024-06-23 17:05:02 阅读 60

操作步骤

1.查看自己的QT支持的OpenSSL版本号

1.1查看版本号

1.新建项目:OpenSSLDemo[采用MinGw32]进行编译2.在pro文件中加入QT += network3.在头文件中加入#include <QDebug> #include <QSslSocket>4.qDebug()<<QSslSocket::sslLibraryBuildVersionString();

通过上述步骤:得出支持的OpenSSL版本-----》本人采用的QT版本为:QT5.14.2 

1.2查看自己的QT版本是否配置了OpenSSL 

添加头文件 #include <QNetworkAccessManager>//看看是否配置了sslQNetworkAccessManager *manager = new QNetworkAccessManager(this);qDebug() << manager->supportedSchemes();

通过上述步骤:得出结论未安装OpenSSL

2 安装OPenSSL 

        安装Open SSL的方式有两种:

        1.下载已经编译好的库,放到指定位置

        2.自己编译源码

2.1下载已经编号好的库

网址:https://slproweb.com/products/Win32OpenSSL.html

在上述网址中找到对应的OPenSSL版本;我的版本是“OpenSSL 1.1.1d 10 Sep 2019”  见官网找到的截图如下:

一个是OpenSSL库,一个是安装库的必备软件,后面有说明【两个都安装吧】

注意值得提醒的是:

此处有Win32和Win64可选,这里的位数指的是你调用OpenSSL开发出来的软件的位数版本,而不是你计算机的位数。开发32位软件选择Win32,64位选择Win64,如果同时需要开发32位和64位的则下载两个比较好的参考网址:https://blog.csdn.net/zhizhengguan/article/details/112848095

安装过程省略了,直接下一步即可。有个小插曲----》我把32和64位的都进行了安装。然后再次运行程序以后发现"OpenSSL 1.1.1d 10 Sep 2019"("ftp", "file", "qrc", "http", "https", "data")输出当前QT支持的openSSL版本: "OpenSSL 1.1.1d 10 Sep 2019"OpenSSL支持情况: trueOpenSSL运行时SSL库版本: "OpenSSL 1.1.1d 10 Sep 2019"多出来了https 和支持情况为 true 但是 在网上寻到代码进行 具体功能验证的时候 会报一些奇奇怪怪的错误。一些明明.h文件里有的函数但是不能被找到使用,未定义。在此呢 先做一个暂定 后续 配置完成在继续教程

2.2代码进行自我编译:先略过

        个人认为没必要,根据QT适配的版本进行下载即可【有闲暇时余再更此段】

3.针对OpenSSL的一些小知识积累

        1.关于名字的变化

在1.0.x之前的版本中,文件为libeay32.dll和ssleay32.dll,在1.1.x之后的版本中,名字是libssl.dll和libcrypto.dll

        2.针对于前面造成的问题趟坑后的解决方式

按照上面的安装OpenSSL 方式.然后将需要的 *.lib 和include文件夹 复制到工程文件夹下面然后在.pro文件里面添加

INCLUDEPATH += $$PWD/include

LIBS += -L$$PWD/lib/MinGW -llibcrypto

LIBS += -L$$PWD/lib/MinGW -llibssl

上述的操作LIBS 的路径不正确 找到的两个库不对

INCLUDEPATH += $$PWD/includeLIBS += -L$$PWD/lib/ -llibcryptoLIBS += -L$$PWD/lib/ -llibssl

为了防止有文件被遗忘:建议规范操作-----》将安装路径下的所有文件全部拷贝到工程文件当中

然后规定只能在pro 里面添加 以下几句话LIBS += -L$$PWD/OpenSSL_Win32/lib/ -llibsslLIBS += -L$$PWD/OpenSSL_Win32/lib/ -llibcryptoINCLUDEPATH += $$PWD/OpenSSL_Win32/includeDEPENDPATH += $$PWD/OpenSSL_Win32/include

 测试成功的代码如下:

QT -= guiCONFIG += c++11 consoleCONFIG -= app_bundleDEFINES += QT_DEPRECATED_WARNINGS#INCLUDEPATH += D:\OpenSSL\SSL_32\OpenSSL-Win32\include#LIBS += D:\OpenSSL\SSL_32\OpenSSL-Win32\lib\libssl.lib \# D:\OpenSSL\SSL_32\OpenSSL-Win32\lib\libcrypto.libSOURCES += \ applink.c \# 第二个例子需要 main.cpp# Default rules for deployment.qnx: target.path = /tmp/$${TARGET}/binelse: unix:!android: target.path = /opt/$${TARGET}/bin!isEmpty(target.path): INSTALLS += targetLIBS += -L$$PWD/OpenSSL-Win32/lib/ -llibsslLIBS += -L$$PWD/OpenSSL-Win32/lib/ -llibcryptoINCLUDEPATH += $$PWD/OpenSSL-Win32/includeDEPENDPATH += $$PWD/OpenSSL-Win32/include==================================================================================#include <QCoreApplication>#include <openssl/ssl.h>#include <QDebug>std::string sha256(const std::string str){ char buf[2]; unsigned char hash[SHA256_DIGEST_LENGTH]; SHA256_CTX sha256; SHA256_Init(&sha256); SHA256_Update(&sha256, str.c_str(), str.size()); SHA256_Final(hash, &sha256); std::string newString = ""; for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) { sprintf(buf,"%02x",hash[i]); newString = newString + buf; } return newString;}int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); std::string str = "Hello World"; qDebug() << QString::fromStdString(sha256(str));//第二个例子 RSA *rsa = RSA_new(); SSL_library_init(); OpenSSL_add_ssl_algorithms(); SSLeay_add_ssl_algorithms(); // 生成 RSA 密钥对,这里的 2048 是密钥位数 BIGNUM *e = BN_new(); BN_set_word(e, RSA_F4); // RSA_F4 是通常的公钥指数值 RSA_generate_key_ex(rsa, 2048, e, nullptr); // 导出公钥到文件 FILE *pubKeyFile = fopen("public_key.pem", "wb"); PEM_write_RSAPublicKey(pubKeyFile, rsa); // 导出私钥到文件(通常需要密码保护) FILE *privKeyFile = fopen("private_key.pem", "wb"); PEM_write_RSAPrivateKey(privKeyFile, rsa, nullptr, nullptr, 0, nullptr, nullptr); // 释放资源 RSA_free(rsa); BN_free(e); fclose(pubKeyFile); fclose(privKeyFile); qDebug()<<"RSA密钥对生成成功!" <<endl; return a.exec();}在第二个例子中 会报错 【OPENSSL_Uplink(59129348,08): no OPENSSL_Applink 】需要将lib文件夹的applink.c 添加到工程文件夹中参考:【https://blog.csdn.net/u010058695/article/details/122980941】

 特别感谢C/C++编程:openssl使用(win10+qt + qmake)_qt把openssl放到c编译-CSDN博客

OpeSSL 版本众多---需要仔细找到对应的版本进行修改才行



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。