如何将XML RSA密钥转换为PEM文件?

时间:2010-06-22 14:40:28

标签: xml security rsa pem xmlseclibs

我有两个XML文件,结构如下:

我的密钥

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

公钥

<RSAKeyValue>
   <Modulus> ... </Modulus>
   <Exponent> ... </Exponent>
</RSAKeyValue>

我正在使用Robert Richards的xmlseclibs库,它需要密钥的.PEM表示才能加密和解密。

作为加密新手,我不知道从哪里开始,粗略的谷歌搜索没有透露任何特别明显的东西......

谢谢!

5 个答案:

答案 0 :(得分:8)

我找到了Java utility可以做到的。

答案 1 :(得分:1)

对于那些希望BouncyCastle可以读取生成的PEM的人:

  1. 使用XMLSec2PEM工具获取pem文件
  2. 将pem转换为pkcs8并返回(!)
  3. 我很满意的最终解决方案:

    1. java XMLSec2PEM my.xml > my.pem
    2. 手动编辑my.pem
    3. org.bouncycastle.openssl.PEMReader.readObject()返回null: - (
    4. openssl pkcs8 -topk8 -inform pem -in my.pem -outform pem -nocrypt -out my.pkcs8
    5. openssl pkcs8 -inform pem -nocrypt -in my.pkcs8 -out my.pkcs8.pem
    6. 现在my.pkcs8.pem可通过PEMReader
    7. 阅读

答案 2 :(得分:0)

我正在寻找完全相同问题的几个小时。这个Java工具完成了这项工作:)

但链接已更改,现在可从here

获取

答案 3 :(得分:0)

找到了这个有用的在线工具RSA Key Converter,它支持

  • XML - &gt; PEM
  • PEM - &gt; XML

答案 4 :(得分:0)

由于xmlseclibs是PHP,似乎可能需要另一个PHP解决方案。以下是:

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->loadKey('<RSAKeyValue>
  <Modulus> ... </Modulus>
  <Exponent> ... </Exponent>
  <P> ... </P>
  <Q> ... </Q>
  <DP> ... </DP>
  <DQ> ... </DQ>
  <InverseQ> ... </InverseQ>
  <D> ... </D>
</RSAKeyValue>');

$privatekey = $rsa->getPrivateKey();
$publickey = $rsa->getPublicKey();
?>

phpseclib内置支持XML密钥,PuTTY密钥和PKCS1密钥。它会自动检测格式并加载它,如果没有提供参数,getPrivateKey / getPublicKey将默认输出PKCS1格式的密钥。更多信息:

http://phpseclib.sourceforge.net/rsa/examples.html#convert