赞
踩
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
链接:https://pan.baidu.com/s/1xTiJf_d-e8QfZyDKFRYr2A
提取码:jg82
编译完成后,打开bin目录的openssl.exe生成公秘钥
开始生成RSA的私钥 genrsa -out rsa_private_key.pem 512 。512代表的是私钥长度,下面就生成了rsa_private_key.pem文件
利用私钥文件生成RSA公钥文件 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,生成rsa_public_key.pem文件
对之前的私钥文件进行PKCS#8编码,生成一个编码后的私钥文件:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -out pkcs8_rsa_private_key.pem –nocrypt,生成pkcs8_rsa_private_key.pem文件
将 pkcs8_rsa_private_key.pem 和 rsa_public_key.pem以记事本的方式进行打开,在程序中,就可以通过这对公秘钥就行加解密
1、创建一个QT项目,将编译完成的oepnssl库中的include的 openssl文件夹和lib文件夹复制到工程目录下,并添加到项目中,添加头文件:右键text,选中Add Existing Diretory,然后点击确定。
添加lib库文件
2、项目头文件,添加所使用到的加解密的头文件
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/bn.h> #include <openssl/bio.h> #include <openssl/evp.h> #include <openssl/ssl.h> #include <openssl/err.h> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); //加密函数 QString rsa_pri_encrypt_base64(const QString &strClearData); //解密函数 QString rsa_pub_decrypt_base64(const QString &strDecryptData); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
2、使用私钥进行加密函数,打开刚刚生成的私钥文件pkcs8_rsa_private_key.pem,复制到加密函数中
//私钥加密 QString MainWindow::rsa_pri_encrypt_base64 (const QString& strClearData) { //私钥 长度为512 (使用自己生成的公秘钥) char private_key[] = "-----BEGIN PRIVATE KEY-----\n"\ "MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAzpXEGSjFGDRdr4Gp\n"\ "k/impFrqxw0JUs7oUwTheJgqNIfCJfw00PHOKmIDI9UoS+E3Ozs1reMP1r0IuUys\n"\ "zX5LGwIDAQABAkEAhUCjcdsTbu5wM8H+QT0VOFSQtf5ZsjlWMB6o1SHJr4Fs8UEE\n"\ "7JHUTGrlUopMrhQDfYxGqDUAXykca99xu8e1QQIhAPPdcze2DeV5X9a8bcd3VEzK\n"\ "Luy6SMOtomEMUKPlYEa7AiEA2N1puJwKEulYWaHywLwhA8tM08YFsFqh18JsUbP5\n"\ "NyECIQCtuykXGnLB9XsqfyjyPnfnEO7nJTsrdGrHGr/kU0gIewIgVWqYGntzSFGa\n"\ "V+t+psUyp8DqaLslQHniJw5QBbpCXaECIQDgDWRfFb7h68XMi2fpkd727YDpl64p\n"\ "fb2H/qFyq3xBDw==\n"\ "-----END PRIVATE KEY-----"; //将字符串键加载到bio对象 BIO* pKeyBio = BIO_new_mem_buf(private_key, strlen(private_key)); 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(); uchar* pClearData = (uchar*)clearDataArry.data(); int nSize = RSA_private_encrypt(nClearDataLen, pClearData, (uchar*)pEncryptBuf, pRsa, RSA_PKCS1_PADDING); QString strEncryptData = ""; if ( nSize >= 0 ){ QByteArray arry(pEncryptBuf, nSize); strEncryptData = arry.toBase64(); } // 释放内存 delete pEncryptBuf; BIO_free_all(pKeyBio); RSA_free(pRsa); return strEncryptData; }
3、使用公钥进行解密函数,打开刚刚生成的公钥文件 rsa_public_key.pem,复制到公钥密函数中
//公钥解密 QString MainWindow::rsa_pub_decrypt_base64(const QString& strDecryptData) { //公钥解密 char public_key[] = "-----BEGIN PUBLIC KEY-----\n"\ "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM6VxBkoxRg0Xa+BqZP4pqRa6scNCVLO\n"\ ![img](https://img-blog.csdnimg.cn/img_convert/3ae4733531d094b9512fcb33f09fc780.png) ![img](https://img-blog.csdnimg.cn/img_convert/5701147cee37e6beae9b7df68f607e93.png) **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** 术提升。** **[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。