通过 OpenSSL (c++) 以 XML (w3c) 格式保存 RSA 公钥和私钥
Posted
技术标签:
【中文标题】通过 OpenSSL (c++) 以 XML (w3c) 格式保存 RSA 公钥和私钥【英文标题】:Save RSA public and private keys in XML (w3c) format via OpenSSL (c++) 【发布时间】:2012-04-24 07:46:53 【问题描述】:我想使用 RSA 公钥和私钥的 XML 文件格式。 现在我找到了如何以 PEM 和二进制 (DER) 格式保存这些密钥(例如,PEM_write_RSAPrivateKey())
我有一个带有 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>
谢谢!
【问题讨论】:
【参考方案1】://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>"));
【讨论】:
谢谢。我曾希望有一个简单的函数,比如 XML_write_RSAPrivateKey()...以上是关于通过 OpenSSL (c++) 以 XML (w3c) 格式保存 RSA 公钥和私钥的主要内容,如果未能解决你的问题,请参考以下文章
使用 openssl/bn.h 将 c++ 痛饮到 python