如何读取PEM + PKCS#1格式的RSA公钥 - python

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

-----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。

参考方案

PyCrypto支持PKCS#1,因为它可以读取X.509 SubjectPublicKeyInfo对象,该对象包含以PKCS#1编码的RSA公钥。

而是,您密钥中编码的数据是纯RSAPublicKey对象(即,具有两个INTEGER(模数和公共指数)的ASN.1 SEQUENCE)。

您仍然可以阅读它。尝试类似的方法:

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对象。
这样的代码就更简单了:

from Crypto.PublicKey import RSA
from base64 import b64decode

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

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

在Python和C++之间传输数据而无需写入Windows和Unix文件 - python

我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…

从C++调用Python函数 - c++

我正在尝试从C++实现调用Python函数。我以为可以通过函数指针来实现,但是似乎不可能。我一直在使用boost.python完成此操作。假设在Python中定义了一个函数:def callback(arg1, arg2): #do something return something 现在,我需要将此函数传递给C++,以便可以从那里调用它。如何使用boos…

如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python

我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…

如何用Cython保持C++类名不变? - c++

我有一个名为Foo的C++类。如果遵循Cython C++ tutorial,则需要以其他方式调用Python类,例如PyFoo。但是我确实也需要调用Python类Foo。如何有效地做到这一点?编辑:我正在尝试接口以前与Boost Python接口的现有C++库。由于不同的原因,我想测试Cython。由于使用Boost:Python调用了Python类,因此…

在Python中以与C++相同的精度乘以两倍 - python

我正在将C++程序重写为Python。我需要乘以2的双精度数,但C++和Python不会给出相同的结果。这是带有“硬编码”值的示例: C++ printf("%f", ( 44474025505478620106407223274000875520.0 * 5454277033526873088.0 ) ); >>> 2…