如何读取PEM + PKCS#1格式的RSA公钥
我有一个RSA公钥的PEM格式+ PKCS#1(我猜):
I have a RSA public key in PEM format + PKCS#1(I guess):
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+zn
JDEbNHODZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE=
-----END RSA PUBLIC KEY-----
我想在Python中获取其ASN1编码版本的SHA1摘要。第一步应该是读取这个键,但是我没能在PyCrypto中做到:
I want to get the SHA1 digest of its ASN1 encoded version in Python. The first step should be to read this key, but I failed to do it in PyCrypto:
>> from Crypto.PublicKey import RSA
>> RSA.importKey(my_key)
ValueError: RSA key format is not supported
href =https://www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.RSA-module.html> PyCrypto的文档说,支持PEM + PKCS#1,所以我困惑。
我也试过M2Crypto,但事实证明M2Crypto不支持PKCS#1,但只支持X.509。
The documentation of PyCrypto says PEM + PKCS#1 is supported, so I'm confused. I've also tried M2Crypto, but it turns out that M2Crypto does not support PKCS#1 but only X.509.
PyCrypto支持 PKCS#1 ,因为它可以读取包含的X.509 SubjectPublicKeyInfo
>
PyCrypto supports PKCS#1 in the sense that it can read in X.509 SubjectPublicKeyInfo
objects that contain an RSA public key encoded in PKCS#1.
在您的密钥中编码的数据是纯粹的 RSAPublicKey
对象(即,具有两个INTEGER,模数和公开指数的ASN.1 SEQUENCE)。
Instead, the data encoded in your key is a pure RSAPublicKey
object (that is, an ASN.1 SEQUENCE with two INTEGERs, modulus and public exponent).
。尝试类似:
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]) )
从2.6版开始,PyCrypto可以导入 RsaPublicKey
ASN.1对象。
代码变得更简单:
Starting from version 2.6, PyCrypto can import also RsaPublicKey
ASN.1 objects.
The code is then much simpler:
from Crypto.PublicKey import RSA
from base64 import b64decode
key64 = b'MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k\
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+znJDEbNHOD\
ZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE='
keyDER = b64decode(key64)
keyPub = RSA.importKey(keyDER)