python cryptography x509 pycrypto key-management

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)