如何在PEM+PKCS#1格式中读取RSA公钥

2024-05-16 21:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个PEM格式的RSA公钥+PKCS#1(我猜):

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

我想得到它在Python中ASN1编码版本的SHA1摘要。第一步应该是读取此密钥,但在PyCrypto中未能执行此操作:

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

documentation of PyCrypto表示支持PEM+PKCS#1,所以我很困惑。 我也试过M2Crypto,但结果发现M2Crypto不支持PKCS#1,而只支持X.509。


Tags: key格式publicpemrsa公钥beginm2crypto
1条回答
网友
1楼 · 发布于 2024-05-16 21:41:31

PyCrypto支持PKCS#1,因为它可以读入X.509SubjectPublicKeyInfo对象,这些对象包含一个在PKCS#1中编码的RSA公钥。

相反,在密钥中编码的数据是一个纯RSAPublicKey对象(即一个ASN.1序列,有两个整数,模和公共指数)。

不过你还是可以读入。尝试以下方法:

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还可以导入RsaPublicKeyASN.1对象。 这样代码就简单多了:

from Crypto.PublicKey import RSA
from base64 import b64decode

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

keyDER = b64decode(key64)
keyPub = RSA.importKey(keyDER)

相关问题 更多 >