【问题标题】:Save RSA public and private keys in XML (w3c) format via OpenSSL (c++)通过 OpenSSL (c++) 以 XML (w3c) 格式保存 RSA 公钥和私钥
【发布时间】: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>

谢谢!

【问题讨论】:

    标签: c++ xml openssl rsa


    【解决方案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()...
    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2018-02-28
    • 2017-12-23
    相关资源
    最近更新 更多