QT5通过openss1.1.1实现RSA加密

编程入门 行业动态 更新时间:2024-10-25 18:26:11

QT5通过openss1.1.1实现<a href=https://www.elefans.com/category/jswz/34/1768564.html style=RSA加密"/>

QT5通过openss1.1.1实现RSA加密

QT5通过openss1.1.1实现RSA加密

1.查看当前版本的QT依赖哪个版本的openssl

#include <QSslSocket>
#include <QDebug>qDebug() << QSslSocket::sslLibraryBuildVersionString();控制台输出:
"OpenSSL 1.1.1w  11 Sep 2023"

可以看到大版本是1.1.1

2.安装openssl

安装openssl有两种方式,一种是下载源码然后自己编译,这种方式有点事版本比较全,缺点是比较费劲,我折腾了两天依然没有编译好···直接放弃了。附源码下载地址:/。

第二种安装方式是使用第三方编译好的安装包,优点是省事,缺点是版本不全,下载连接:.html

在源码下载地址中可以看到1.1.1有很多版本,网上有人说不同版本之间会有所不同,目前在我使用中暂未发现问题。

注意:openssl大版本之间是不同的:1.0.X使用的是libeay32.dll和ssleay32.dll,这也是目前网上教程中被添加最多的库,但是1.1.X之后变成了libssl.dll与libcrypto.dll,此处在pro文件中添加库时会用到。

我是直接下载的第三方编译好的openssl,使用默认的安装设置,安装好之后会在C:\Program Files\OpenSSL-Win64中生成一系列文件。

3.使用

3.1首先将安装路径下lib与include文件夹全部复制到工程文件夹中,在 pro文件中添加库

INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -llibcrypto
LIBS += -L$$PWD/lib -llibssl

3.2 测试能否正确引入头文件

#include "openssl/rsa.h"
#include "openssl/pem.h"
#include "openssl/err.h"

3.3 代码测试

.h文件QString rsaPubEncrypt(const QString &strPlainData, const QString &strPubKey);.cpp文件
QString MainWindow::rsaPubEncrypt(const QString &strPlainData, const QString &strPubKey)
{QByteArray pubKeyArry = strPubKey.toUtf8();uchar* pPubKey = (uchar*)pubKeyArry.data();BIO *pKeyBio = BIO_new_mem_buf(pPubKey, pubKeyArry.length());//若编译不正确 此处会报错if (pKeyBio == NULL) {return "";}RSA* pRsa = RSA_new();if (strPubKey.contains(BEGIN_RSA_PUBLIC_KEY)) {pRsa = PEM_read_bio_RSAPublicKey(pKeyBio, &pRsa, NULL, NULL);}else {pRsa = PEM_read_bio_RSA_PUBKEY(pKeyBio, &pRsa, NULL, NULL);qDebug() << "pRsa  pRsa " << pRsa;}if (pRsa == NULL) {BIO_free_all(pKeyBio);return "";}int nLen = RSA_size(pRsa);char* pEncryptBuf = new char[nLen];//加密qDebug() << "strPlainData: " << strPlainData;QByteArray plainDataArry = strPlainData.toUtf8();int nPlainDataLen = plainDataArry.length();int exppadding=nLen;if(nPlainDataLen>exppadding-11)exppadding=exppadding-11;int slice=nPlainDataLen/exppadding;//片数if(nPlainDataLen%(exppadding))slice++;QString strEncryptData = "";QByteArray arry;for(int i=0; i<slice; i++){QByteArray baData = plainDataArry.mid(i*exppadding, exppadding);nPlainDataLen = baData.length();memset(pEncryptBuf, 0, nLen);uchar* pPlainData = (uchar*)baData.data();int nSize = RSA_public_encrypt(nPlainDataLen,pPlainData,(uchar*)pEncryptBuf,pRsa,RSA_PKCS1_PADDING);if (nSize >= 0){arry.append(QByteArray(pEncryptBuf, nSize));}}strEncryptData += arry.toBase64();//释放内存delete pEncryptBuf;BIO_free_all(pKeyBio);RSA_free(pRsa);return strEncryptData;
}
测试代码:QString str= rsaPubEncrypt("123",pubkey);//pubkey需要生成,即用公钥对字符串123进行加密qDebug() << str;  //打印生成的加密内容

更多推荐

QT5通过openss1.1.1实现RSA加密

本文发布于:2023-11-17 01:11:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637709.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:RSA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!