2010-06-22 230 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

相關問題