2010-06-22 58 views
8

Tengo dos archivos XML, estructurada de la siguiente manera:¿Cómo convierto una clave XML RSA en un archivo PEM?

Mi Clave

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

una clave pública

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

estoy usando la biblioteca xmlseclibs por Robert Richards, que requiere una representación .PEM de la clave para cifrar y descifrar cosas.

Como un novato cifrado, no estoy seguro de por dónde empezar, y una somera búsqueda en Google no revela nada particularmente obvio ...

Gracias!

+0

Parece que los xmlseclibs tiene un método 'XMLSecurityKey :: convertRSA' que acepta un módulo y un exponente y creará una clave pública compatibles PEM. Sin embargo, no parece tener ningún método para crear las claves privadas necesarias. ¿Alguna ayuda sobre eso? – Philip

+0

Creo que el formato/presentación de clave es de [RFC 3275, sintaxis y procesamiento de firma XML] (https://www.ietf.org/rfc/rfc3275.txt) – jww

Respuesta

0

Estaba buscando horas exactamente el mismo problema. Esta herramienta de Java hizo el trabajo :)

Pero la relación ha cambiado, que ya está disponible en here

0

encontrado esta útil herramienta en línea RSA Key Converter, que apoya

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

Nunca utilice herramientas en línea para este tipo de información confidencial. – Torge

+1

Se puede usar solo para claves públicas. – Ofigenn

+1

Puede ser útil para claves privadas conocidas públicamente, que también se usan para demostraciones. –

0

Para aquellos que desean que el PEM resultante sea legible por BouncyCastle:

  1. uso XMLSec2PEM herramienta para obtener un archivo pem
  2. convertido pem a PKCS8 y la espalda

La solución final estoy contento con (!):

  1. java XMLSec2PEM my.xml > my.pem
  2. editar my.pem manualmente un poco
  3. org.bouncycastle.openssl.PEMReader.readObject() vuelve 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. ahora my.pkcs8.pem es legible con la PEMReader
1

Desde xmlseclibs es PHP parece que otra solución PHP podría ser deseable. Así es como:

<?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 tiene soporte para las llaves, llaves XML masilla y teclas PKCS1. Detectará automáticamente el formato y lo cargará, y getPrivateKey/getPublicKey emitirá claves formateadas PKCS1 de manera predeterminada si no se proporcionan parámetros.Más información:

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

Cuestiones relacionadas