python - Cómo leer una clave pública RSA en formato PEM+PKCS#1
cryptography x509 (1)
Tengo una clave pública RSA en formato PEM + PKCS # 1 (supongo):
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+zn
JDEbNHODZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE=
-----END RSA PUBLIC KEY-----
Quiero obtener el resumen SHA1 de su versión codificada ASN1 en Python. El primer paso debería ser leer esta clave, pero no pude hacerlo en PyCrypto:
>> from Crypto.PublicKey import RSA
>> RSA.importKey(my_key)
ValueError: RSA key format is not supported
La documentación de PyCrypto dice que PEM + PKCS # 1 es compatible, por lo que estoy confundido. También probé M2Crypto, pero resulta que M2Crypto no admite PKCS # 1 sino solo X.509.
PyCrypto admite PKCS # 1 en el sentido de que puede leer en X.509 SubjectPublicKeyInfo
objetos que contienen una clave pública RSA codificada en PKCS # 1 .
En cambio, los datos codificados en su clave son un objeto RSAPublicKey
puro (es decir, una SECUENCIA ASN.1 con dos INTEGER, módulo y exponente público).
Aún así puedes leerlo en. Intenta algo como:
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]) )
A partir de la versión 2.6, PyCrypto puede importar también objetos ASN.1 RsaPublicKey
. El código es entonces mucho más 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)