2016-07-19 13 views
0

私はPEM公開鍵の印刷方法やファイルへの保存方法を知っています。変数に変数を保存する関数はありません。もちろんファイルに保存してから読むことができますが、可能ならばそれを避けたいと思います。私は、公開鍵の印刷方法変数にRSA公開鍵を取り出す方法は?

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

公開鍵は、RSAで '{N、E}'ペアです。 'RSA *'変数 'rsa'にあります。 – jww

+0

しかし、それをPEM文字列に解析する関数はありますか?または私はそれを自分で行う必要がありますか? –

+0

['RSA_print'](http://www.openssl.org/docs/man1.0.2/crypto/rsa.html)または[' RSA_print_fp'](http://www.openssl.org/docs/man1 .0.2/crypto/rsa.html)。あるいは、 'BIGNUM'を直接印刷してください。あなたは 'rsa-> n'と' rsa-> e'でそれらを見つけることができます。 – jww

答えて

0

[OK]を、私は醜い方法でそれをやったが、私は他の方法を見つけることができませんでした。

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----- 
関連する問題