我知道如何打印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);
答案 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-----