OpenSSL笔记-生成RSA公私密钥以PEM格式到char*中(非保存为文件)

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenSSL笔记-生成RSA公私密钥以PEM格式到char*中(非保存为文件)相关的知识,希望对你有一定的参考价值。

OpenSSL笔记-生成RSA公私密钥以PEM格式到char*中(非保存为文件)

不多说,直接上关键代码:

    int ret = 0;
    RSA *r = RSA_new();
    BIGNUM *bne = BN_new();
    int bits = 2048;
    unsigned long e = RSA_F4;

    bne = BN_new();
    ret = BN_set_word(bne, e);

    if(!ret)

        qDebug() << "BN_set_word() error";
        RSA_free(r);
        BN_free(bne);
        return;
    

    ret = RSA_generate_key_ex(r, bits, bne, nullptr);
    if(!ret)

        qDebug() << "RSA_generate_key() error";
        RSA_free(r);
        BN_free(bne);
        return;
    

    BIO *bp_public = BIO_new(BIO_s_mem());;
    BIO *bp_private = BIO_new(BIO_s_mem());
    ret =PEM_write_bio_RSAPrivateKey(bp_private, r, NULL, NULL, 0, NULL, NULL);
    if(!ret)

        qDebug() << "PEM_write_bio_RSAPrivateKey() error";
        BIO_free_all(bp_private);
        RSA_free(r);
        BN_free(bne);
        return;
    

    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;
    

    //存储到Map中
    size_t nPriKeyLen = BIO_pending(bp_private);
    size_t nPubKeyLen = BIO_pending(bp_public);

    //密钥对读取到字符串
    char* pPriKey = new char[nPriKeyLen];
    char* pPubKey = new char[nPubKeyLen];
    BIO_read(bp_private, pPriKey, nPriKeyLen);
    BIO_read(bp_public, pPubKey, nPubKeyLen);

    RSAStu rsaStu;
    rsaStu.privateKey = pPriKey;
    rsaStu.publicKey = pPubKey;

这个RSAStu是我自己写的结构体。

打印下:

这里包含的头文件为:

#include <openssl/rsa.h>
#include <openssl/bio.h>
#include <openssl/pem.h>

以上是关于OpenSSL笔记-生成RSA公私密钥以PEM格式到char*中(非保存为文件)的主要内容,如果未能解决你的问题,请参考以下文章

使用openssl生成RSA公私密钥

快速生成 符合要求的 公私密钥

openssl 生成公私钥

如何使用openssl生成RSA公钥和私钥对 / 蓝讯

rsa 公钥 私钥 生成 需要些啥参数

OpenSSL生成公私钥