Qt

您所在的位置:网站首页 rsa分段加密 Qt

Qt

2024-07-04 07:05| 来源: 网络整理| 查看: 265

目录

一.摘要

二.RSA算法

RSA算法

一文搞懂 RSA 算法

三.RSA算法C++代码实现

1. windows下:

1.1 安装Openssl

1.2 配置Qt工程的.pro文件,加入Windows下依赖的Openssl库和头文件

2. Linux下

2.1 下载Openssl源码包

2.2 配置、编译和安装Openssl

2.3 配置Qt工程的.pro文件,加入Linux下依赖的Openssl库和头文件

3. 代码实现

 新建RSA算法类MyRSA

  一.摘要

最近项目中,需要用到RSA加解密算法实现对数据的加解密处理,但是Qt的算法库中并没有RSA,所以只能尝试着调用其它库。查看资料,发现Openssl和gmp(GNU MP数字运算库)都支持RSA,权衡后Openssl用的比较多,所以打算用openssl库来实现RSA算法。

 

二.RSA算法

RSA是目前使用最广泛的公钥密码体制之一。它是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

详情参考:

RSA算法 一文搞懂 RSA 算法

大概就是,RSA加解密使用的密钥有两者方式:对称密钥(加密和解密使用同一种密钥的方式)和非对称密钥(加密和解密使用不同的密码的方式,即公私密钥对),一般公私密钥对的方式用的比较多。再则,就是公钥加密后需要对应私钥才能解密,同理私钥加密的得用对应的公钥才能解密。算法的原理和描述,在此,就不再赘述。

 

三.RSA算法C++代码实现

Qt,中需要用到Openssl,得注意版本相关性。Openssl的版本对Qt各个版本支持各不相同。可通过如下方式获知当前Qt版本支持的Openssl版本;

#include qDebug() RSA_F4 if ( !pRsa ){ return false; } BIO *pPriBio = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(pPriBio, pRsa, NULL, NULL, 0, NULL, NULL); BIO *pPubBio = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPublicKey(pPubBio, pRsa); // 获取长度 size_t nPriKeyLen = BIO_pending(pPriBio); size_t nPubKeyLen = BIO_pending(pPubBio); // 密钥对读取到字符串 char* pPriKey = new char[nPriKeyLen]; char* pPubKey = new char[nPubKeyLen]; BIO_read(pPriBio, pPriKey, nPriKeyLen); BIO_read(pPubBio, pPubKey, nPubKeyLen); // 存储密钥对 strPubKey = QByteArray(pPubKey, nPubKeyLen); strPriKey = QByteArray(pPriKey, nPriKeyLen); // 内存释放 RSA_free(pRsa); BIO_free_all(pPriBio); BIO_free_all(pPubBio); delete pPriKey; delete pPubKey; return true; } /** * @brief rsa_pri_encrypt 私钥加密 * @param strClearData 明文 * @param strPriKey 私钥 * @return 加密后数据(base64格式) */ QString MyRSA::rsa_pri_encrypt_base64 (const QString& strClearData, const QString& strPriKey) { QString strEncryptData = ""; QByteArray encryptData; QByteArray priKeyArry = strPriKey.toUtf8(); uchar* pPriKey = (uchar*)priKeyArry.data(); BIO* pKeyBio = BIO_new_mem_buf(pPriKey, strPriKey.length()); if (pKeyBio == NULL){ return ""; } RSA* pRsa = RSA_new(); pRsa = PEM_read_bio_RSAPrivateKey(pKeyBio, &pRsa, NULL, NULL); if ( pRsa == NULL ){ BIO_free_all(pKeyBio); return ""; } int nLen = RSA_size(pRsa); char* pEncryptBuf = new char[nLen]; memset(pEncryptBuf, 0, nLen); QByteArray clearDataArry = strClearData.toUtf8(); int nClearDataLen = clearDataArry.length(); // qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3