Comment lire une clé publique RSA dans le format PEM + PKCS#1

j'ai une clé publique RSA au format PEM + PKCS#1 (je suppose):

-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+zn
JDEbNHODZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE=
-----END RSA PUBLIC KEY-----

je veux obtenir le sha1 digest de sa version encodée ASN1 en Python. La première étape devrait être de lire cette clé, mais je n'ai pas réussi à le faire dans Phycrypto:

>> from Crypto.PublicKey import RSA
>> RSA.importKey(my_key)
ValueError: RSA key format is not supported

documentation de PyCrypto dit PEM + PKCS#1 est supporté, donc je suis confus. J'ai aussi essayé M2Crypto, mais il s'avère que M2Crypto ne supporte pas PKCS#1 mais seulement X. 509.

25
demandé sur Tshepang 2012-05-13 07:47:27
la source

1 ответов

les supports de PyCryptoPKCS#1 dans le sens qu'il peut lire dans X. 509 SubjectPublicKeyInfo objets contient une clé publique RSA encodée en PKCS#1.

au lieu de cela, les données encodées dans votre clé sont un pur RSAPublicKey objet (qui est, d'une ASN.1 Séquence avec deux entiers, un module et un exposant public).

Vous pouvez toujours le lire dans même si. Essayez quelque chose comme:

from Crypto.PublicKey import RSA
from Crypto.Util import asn1
from base64 import b64decode

key64 = 'MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k\
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+znJDEbNHOD\
ZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE='

keyDER = b64decode(key64)
seq = asn1.DerSequence()
seq.decode(keyDER)
keyPub = RSA.construct( (seq[0], seq[1]) )

à partir de la version 2.6, Phycrypto peut importer aussi RsaPublicKey ASN.1 objets. Le code est alors beaucoup plus simple:

from Crypto.PublicKey import RSA
from base64 import b64decode

key64 = b'MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k\
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+znJDEbNHOD\
ZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE='

keyDER = b64decode(key64)
keyPub = RSA.importKey(keyDER)
23
répondu SquareRootOfTwentyThree 2014-04-20 15:25:08
la source