【Qt开发笔记】Qt使用QSslSocket出现关于openssl调用的错误解决方案

1.错误描述

Qt程序在运行时出现QSslSocket的如下报错,大致报错内容为qt.network.ssl: QSslSocket: cannot call unresolved function XXX。

这里写图片描述

2.错误分析

这里的报错很直观,应该是程序运行时缺少openssl相关的动态加载库。查阅相关资料,缺少libeay32.dllssleay32.dll两个库文件。

3.解决方案

有考虑过在openssl官网上下载相关库或源码来编译,但是这里并不确定当前Qt所使用的openssl版本。本想着在系统中查找一下已有的库文件,使用搜索工具搜索了一下,发现在QtCreator的安装目录下是有libeay32.dll和ssleay32.dll两个库的。

将QtCreator目录下的libeay32.dll和ssleay32.dll库文件拷贝到Qt库的bin目录下,也可以直接拷贝到程序的运行目录下,便于打包发布。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QT C++中使用OpenSSL生成jwk,可以参考以下步骤: 1. 首先,需要安装OpenSSL库。可以在官网上下载对应的安装包进行安装。 2. 在QT C++项目中添加OpenSSL库的头文件和库文件。在.pro文件中添加以下代码: ``` INCLUDEPATH += /usr/local/ssl/include LIBS += -L/usr/local/ssl/lib -lssl -lcrypto ``` 3. 编写生成jwk的代码。可以参考以下代码: ``` #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/evp.h> #include <openssl/bio.h> #include <openssl/err.h> #include <QJsonObject> QJsonObject generateJWK(int keySize) { QJsonObject jwk; // 生成RSA密钥对 RSA* rsa = RSA_generate_key(keySize, RSA_F4, NULL, NULL); // 将RSA密钥对转换为PEM格式 BIO* bio = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL); size_t privateKeyLen = BIO_pending(bio); char* privateKey = new char[privateKeyLen + 1]; BIO_read(bio, privateKey, privateKeyLen); privateKey[privateKeyLen] = '\0'; BIO* pubkeyBio = BIO_new(BIO_s_mem()); PEM_write_bio_RSA_PUBKEY(pubkeyBio, rsa); size_t publicKeyLen = BIO_pending(pubkeyBio); char* publicKey = new char[publicKeyLen + 1]; BIO_read(pubkeyBio, publicKey, publicKeyLen); publicKey[publicKeyLen] = '\0'; jwk.insert("kty", "RSA"); jwk.insert("n", QByteArray(reinterpret_cast<const char*>(rsa->n->data), rsa->n->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("e", QByteArray(reinterpret_cast<const char*>(rsa->e->data), rsa->e->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("d", QByteArray(reinterpret_cast<const char*>(rsa->d->data), rsa->d->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("p", QByteArray(reinterpret_cast<const char*>(rsa->p->data), rsa->p->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("q", QByteArray(reinterpret_cast<const char*>(rsa->q->data), rsa->q->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("dp", QByteArray(reinterpret_cast<const char*>(rsa->dmp1->data), rsa->dmp1->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("dq", QByteArray(reinterpret_cast<const char*>(rsa->dmq1->data), rsa->dmq1->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("qi", QByteArray(reinterpret_cast<const char*>(rsa->iqmp->data), rsa->iqmp->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("privateKey", privateKey); jwk.insert("publicKey", publicKey); // 释放RSA密钥对和BIO RSA_free(rsa); BIO_free_all(bio); BIO_free_all(pubkeyBio); return jwk; } ``` 4. 调用生成jwk的函数,并将生成的jwk保存到文件中: ``` QJsonObject jwk = generateJWK(2048); QFile file("jwk.json"); if (file.open(QIODevice::WriteOnly)) { QJsonDocument doc(jwk); QByteArray data = doc.toJson(QJsonDocument::Indented); file.write(data); file.close(); } ``` 以上就是使用OpenSSLQT C++中生成jwk的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值