2010-06-22 140 views
8

我有两个XML文件,其结构如下:如何将XML RSA密钥转换为PEM文件?

我的钥匙

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

公钥

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

我使用xmlseclibs库由罗伯特·理查兹需要一个.PEM表示密钥以加密和解密事物。

作为加密新手,我不知道从哪里开始,并粗略谷歌搜索并没有透露什么特别明显...

谢谢!

+0

看来,xmlseclibs有一个方法'XMLSecurityKey :: convertRSA'它接受一个模量和指数,将创建一个PEM兼容的公共密钥。但是,它似乎没有任何方法来创建必要的私钥。 对此有何帮助? – Philip 2010-06-22 15:54:38

+0

我认为关键格式/演示文稿来自[RFC 3275,XML签名语法和处理](https://www.ietf.org/rfc/rfc3275.txt) – jww 2017-12-18 17:28:21

回答

0

我正在为完全相同的问题寻找小时。这个Java工具做的工作:)

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

0

发现这个有用的在线工具RSA Key Converter,支持

  • XML - > PEM
  • PEM - > XML
+7

切勿使用在线工具来处理这类敏感信息。 – Torge 2015-02-11 11:21:56

+1

它只能用于公钥。 – Ofigenn 2017-01-10 15:32:02

+1

它也可用于公开的私人密钥,也用于演示。 – 2017-07-23 20:03:11

0

对于那些想要得到的PEM可读BouncyCastle

  1. 使用XMLSec2PEM工具获得PEM文件
  2. 转换PEM到PKCS8和背部

最终的解决方案,我很高兴与(!):

  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
1

由于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

相关问题