如何将RSA公钥提取到变量?

时间:2016-07-19 07:58:45

标签: c++ openssl

我知道如何打印PEM公钥或如何将其保存在文件中。我找不到任何将其保存在变量中的函数。当然我可以将它保存在文件中然后从中读取它,但如果可能的话我想避免它。

我如何打印公钥:

RSA* rsa = RSA_new();
BIGNUM* bne = BN_new();
EVP_PKEY* pkey;
BIO* pem1;
pem1 = BIO_new_fp(stdout, BIO_NOCLOSE);

rc = BN_set_word(bne,RSA_F4);
if(rc != 1) {
    goto _setWord_failed;
}

rc = RSA_generate_key_ex(rsa, 2048, bne, NULL);
if(rc != 1) {
    goto _setWord_failed;
}

pkey = EVP_PKEY_new();

rc = EVP_PKEY_set1_RSA(pkey,rsa);
if(rc != 1) {
    goto _setRSA_failed;
}

PEM_write_bio_PUBKEY(pem1,pkey);

BIO_free(pem1);
EVP_PKEY_free(pkey);
RSA_free(rsa);
BN_free(bne);

1 个答案:

答案 0 :(得分:1)

好的,我是以丑陋的方式做到的,但我没有找到任何其他方式。

int rc;
RSA* rsa = RSA_new();
BIGNUM* bne = BN_new();
EVP_PKEY* pkey;
BIO* pem1;

pem1 = BIO_new_fp(stdout, BIO_NOCLOSE);
char * string = (char*)malloc(600*sizeof(char)); //bigger than I need
setbuf(stdout, string);
ui32 size = 0;

rc = BN_set_word(bne,RSA_F4);
if(rc != 1) {
    //error message
}

rc = RSA_generate_key_ex(rsa, 2048, bne, NULL);
if(rc != 1) {
    //error message
 }

pkey = EVP_PKEY_new();
rc = EVP_PKEY_set1_RSA(pkey,rsa);
if(rc != 1) {
    //error message
}

rc = PEM_write_bio_PUBKEY(pem1,pkey);
size = strlen(string);
setbuf(stdout, NULL);

IO_free(pem1);
EVP_PKEY_free(pkey);
RSA_free(rsa);
BN_free(bne);

现在在变量字符串中我正是我需要的:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwww7XUUFXW8/+/MZVDB3
W+emyOSW7HNlEOVk3Gg5/k5kKj2gDjPvbiUPSGtPQR9XA1vIcW13HZGkkdo2NFtV
8+sUp9eV+37LNdBg1t5M0RsD8T+o+7pyJ2IM1QjALFMK7UmdprLnQUAmnNwn4CnO
IXwKmde/Gwq9bn3icZYppS8iMc6hgXx73y5A34+eUgU80xnXZGmBF5SAEAPRSRzl
XzqRFBGkNkM0rAhS3IqedtXmKJizGyHYba7DrSK2LL6xCXHvgxpuiIPqWL648ktC
EWRcS4vBXd1XpAGX0clvZ5tKwbldD2mOQIXVmcN6D4/qdDH1kjBS1m0+0Z9NB2wg
iwIDAQAB
-----END PUBLIC KEY-----