这篇文章是2014年2月26号的,有点老了,但挺有用的。
首先要配置好环境,再前一篇笔记中已经说明了,在此不再说明。
这里我把老外的这套代码,改写成Qt pro管理项目。
关键代码如下:
GenerateRSAKeys.pro
QT += core
QT -= gui
TARGET = GenerateRSAKeys
CONFIG += console
CONFIG += c++11
CONFIG -= app_bundle
QMAKE_CFLAGS = -fpermissive
QMAKE_CXXFLAGS = -fpermissive
QMAKE_LFLAGS = -fpermissive
INCLUDEPATH += /usr/local/ssl/include
LIBS += -L /usr/local/ssl/lib/ -lssl -lcrypto
TEMPLATE = app
SOURCES += main.cpp
main.cpp
#include <QCoreApplication>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int ret = 0;
RSA *r = nullptr;
BIGNUM *bne = nullptr;
BIO *bp_public = nullptr;
BIO *bp_private = nullptr;
int bits = 2048;
unsigned long e = RSA_F4;
//generate rsa key
bne = BN_new();
ret = BN_set_word(bne, e);
if(!ret){
qDebug() << "BN_set_word() error";
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
BN_free(bne);
return 0;
}
r = RSA_new();
ret = RSA_generate_key_ex(r, bits, bne, nullptr);
if(!ret){
qDebug() << "RSA_generate_key() error";
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
BN_free(bne);
return 0;
}
//save public key
bp_public = BIO_new_file("public.pem", "w+");
ret = PEM_write_bio_RSAPublicKey(bp_public, r);
if(!ret){
qDebug() << "PEM_write_bio_RSAPublicKey() error";
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
BN_free(bne);
return 0;
}
//save private key
bp_private = BIO_new_file("private.pem", "w+");
ret = PEM_write_bio_RSAPrivateKey(bp_private, r, nullptr, nullptr, 0, nullptr, nullptr);
if(!ret){
qDebug() << "PEM_write_RSAPrivateKey() error";
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
BN_free(bne);
return 0;
}
//free
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
BN_free(bne);
qDebug() << "success";
return a.exec();
}
运行截图如下:
此时输出两个文件:
private.pem:
public.pem
源码打包下载地址:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://it1995.blog.csdn.net/article/details/125671029
内容来源于网络,如有侵权,请联系作者删除!