2012-04-24 158 views
0

我想使用RSA公钥和私钥的XML文件格式。 现在我发现如何保存在PEM和二进制(DER)格式,这些键(例如,PEM_write_RSAPrivateKey())通过OpenSSL(C++)保存XML(w3c)格式的RSA公钥和私钥

我有一个XML格式的RSA密钥字符串,我需要加载到EVP_PKEY或RSA的OpenSSL结构。

XML格式是这样的:

<RSAKeyPair> 
    <Modulus>...</Modulus> 
    <Exponent>...</Exponent> 
    <P>...</P> 
    <Q>...</Q> 
    <DP>...</DP> 
    <DQ>...</DQ> 
    <InverseQ> 
    ... 
    </InverseQ> 
    <D>...</D> 
</RSAKeyPair> 

谢谢!

回答

2
//just a code for demo,not for actually use 
int len; 
RSA *rsa; 
BIO *bio; 
unsigned char *data; 
bio = BIO_new(BIO_s_meme()); 
BIO *b64; 
b64 = BIO_new(BIO_f_base64()); 
BIO_write(bio, "<RSAKeyPair>\n",strlen("<RSAKeyPair>\n")); 
//write Modulus 
len=BN_num_bytes(rsa->n); 
data=(unsigned char *)OPENSSL_malloc(len); 
if(data) { 
    BIO_write(bio," <Modulus>",strlen(" <Modulus>")); 
    BN_bn2bin(rsa->n,data); 
    bio = BIO_push(b64, bio); 
    BIO_write(bio, data, len); 
    (void)BIO_flush(bio); 
    BIO_pop(bio); 
    BIO_reset(b64); 
    BIO_write(bio,"</Modulus>",strlen("</Modulus>")); 
} 
//write Exp 
... 
//write the bignum in rsa structure you want 
BIO_write(bio, "</RSAKeyPair>\n",strlen("</RSAKeyPair>")); 
+0

谢谢。我曾希望有一个简单的函数,如XML_write_RSAPrivateKey()... – egoroveo 2012-04-24 08:54:42