2010-02-02 8 views
1

Mon partenaire m'a donné une clé publique RSA qui ressemble à ceci:Convertir les chaînes de clés publiques/privées RSA xmlString

 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCSK+roLfbUYf6PGNIf6Ej8R5EqSTjlRABTu7T0FxR/B6iurI80jktW9+zKu4jFnFJ8oYx24raD3x5KhJZR2VCBEEbtYpPq/5E25v+LIkFbx8sNkMvEACZdAWyeQcEookGfKDER4PGrB35bntcO2SnItTZc8BOI3jAOBXTeBO16NwIDAQAB 

Je sais qu'il ya des Modulus et Exponent dans une clé publique, j'ai vu un fichier de clé RSA xml; mais je ne sais pas comment extraire ces parties de cette chaîne.

Est-ce que quelqu'un pourrait savoir comment accomplir ce que j'essaie de faire?

Répondre

1

Il s'agit d'un SubjectPublicKeyInfo codé en base 64 (voir RFC 5280) pour une clé publique RSA. Il contient, comme vous l'avez noté, un module RSA et un exposant public.

1

Pour compléter la réponse de GREGS, en supposant que vous utilisez Java comme langage de programmation:

  1. Vous devriez transformer l'encodage base64 en binaire. Il y a des décodeurs Base64, par exemple. this one, qui semble être "domaine public", donc réutilisable à volonté. Vous pouvez également l'implémenter vous-même; ce n'est pas dur. Wikipedia a les liens utiles pour cela.
  2. Décoder le blob binaire à l'aide de la structure ASN.1 SubjectPublicKeyInfo. Ce n'est pas très facile (sauf si vous maîtrisez ASN.1) mais le code existant peut être utilisé pour cela. En particulier, Java sait comment faire cela directement.

décodage clé publique en Java ressemble à ceci (en supposant que le blob binaire est dans la variable blob):

KeyFactory kf = KeyFactory.getInstance("RSA"); 
KeySpec ks = new X509EncodedKeySpec(blob); 
RSAPublicKey pk = (RSAPublicKey)kf.generatePublic(ks); 

et de l'instance RSAPublicKey, vous avez les méthodes getModulus() et getPublicExponent() qui sont explicites . Les classes pertinentes sont dans les paquets java.security, java.security.interfaces et java.security.spec. Pour votre clé publique, ceci donne les résultats suivants:

modulus   = 102645155313298195029358862270152655993457886674545775623230610032728692959011417523892551564448476401788726191516935717690886291325065114613951136136194912439244754958152467056511740824446734443711392654194943771385565670988939260236433577393483222184597978937921816958725758100559250155638540637401770719799 
public exponent = 65537 
Questions connexes