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 résumé SHA1 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 PyCrypto:
>> from Crypto.PublicKey import RSA
>> RSA.importKey(my_key)
ValueError: RSA key format is not supported
Le documentation de PyCrypto indique que PEM + PKCS # 1 est pris en charge, donc je suis confus. J'ai également essayé M2Crypto, mais il s'avère que M2Crypto ne prend pas en charge PKCS # 1 mais uniquement X.509.
PyCrypto prend en charge PKCS # 1 dans le sens où il peut lire en X.509 SubjectPublicKeyInfo
objets qui contiennent une clé publique RSA codée en PKCS # 1.
Au lieu de cela, les données encodées dans votre clé sont un pur objet RSAPublicKey
(c'est-à-dire une SÉQUENCE ASN.1 avec deux entiers, module et exposant public).
Vous pouvez toujours le lire. 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, PyCrypto peut également importer RsaPublicKey
objets ASN.1. 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)