2010-07-31 25 views
1

Le titre dit tout. J'ai une chaîne hexadécimale représentant une clé privée, et pour que je puisse l'utiliser avec OpenSSL, je dois pouvoir le convertir dans un format supporté par OpenSSL, que ce soit PEM ou autre.Comment procéder pour convertir une représentation hexadécimale d'une clé privée en un format supporté par OpenSSL (PEM/DER /?)

Je sais que l'on peut lire une clé au format PEM et l'imprimer dans un format comme celui-ci:

Private-Key: (1024 bit) 
modulus: 
    01:02:03:04.. 
publicExponent: 65537 (0x10001) 
privateExponent: 
    01:02:03:04.. 
prime1: 
    01:02:03:04.. 
prime2: 
    01:02:03:04.. 
exponent1: 
    01:02:03:04.. 
exponent2: 
    01:02:03:04.. 
coefficient: 
    01:02:03:04.. 

Mais je n'ai pas été en mesure de trouver des informations qui convertit une clé de ce format au PEM format. Vais-je vraiment être forcé de RFC guerrier et écrire mon propre convertisseur?

+1

Lorsque vous dites que vous avez une chaîne hexadécimale représentant une clé, qu'est-ce que cela signifie exactement? Une chaîne hexadécimale code une chaîne d'octets, mais une chaîne d'octets elle-même doit avoir un format. Alors, dans quel format sont les données sous-jacentes? Les outils de ligne de commande OpenSSL sont très efficaces pour la conversion entre les formats, il est donc possible que vous puissiez le faire avec ceux-ci. –

Répondre

0

En fait, j'ai trouvé moi-même une solution. Pour ce faire, divisez le format que j'ai décrit ci-dessus en 8 chaînes hexadécimales. Après cela, la seule chose que vous devez faire est de lire les clés du disque ou quoi que ce soit, puis utilisez la fonction BN_hex2bn() et remplissez la structure RSA. Lorsque vous l'avez rempli, vous pouvez utiliser PEM_write_RSAPrivateKey pour l'écrire sur le disque.

Je sais que la réponse n'est pas très détaillée, mais si vous utilisez les fonctions (vous êtes quelqu'un d'autre qui court dedans) tout sera clair.

0

Je ne l'ai pas essayé de cette façon, mais vous pouvez regarder l'API Bouncy Castle, à partir d'ici:

http://www.bouncycastle.org/docs/docs1.6/index.html

Il semble que vous pouvez définir les parties de la clé privée et alors vous pouvez utiliser leur API pour l'enregistrer dans un format standard.

Ils ont une API Java et .NET disponible.