跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 工具系统 > 数据分析 > QT适配OpenSSL库的保姆级教程

QT适配OpenSSL库的保姆级教程

时间:2024-04-26 11:15:19 来源:网络cs 作者:淼淼 栏目:数据分析 阅读:

标签: 保姆  教程 

操作步骤

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 版本众多---需要仔细找到对应的版本进行修改才行

本文链接:https://www.kjpai.cn/news/2024-04-26/162448.html,文章来源:网络cs,作者:淼淼,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论