加载RSA公钥文件并在Python中转换为二进制数组?

加载RSA公钥文件并在Python中转换为二进制数组?,python,python-3.x,rsa,Python,Python 3.x,Rsa,我有一个用于RSA私钥的PEM格式的文本文件,例如: -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAhlxsnlo31l3u3w5jWyYpGVaNi9eDslPHgNV+I8Jb0hxGKXka hnVOBu+b5IrcPcivWBIPQBNJp2svD/GVFWZQsKXshZA3meiRO+/k3qjBh7aDaakW ...etc -----END RSA PRIVATE KEY----- 我将其与Python RSA库一起加载: im

我有一个用于RSA私钥的PEM格式的文本文件,例如:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAhlxsnlo31l3u3w5jWyYpGVaNi9eDslPHgNV+I8Jb0hxGKXka
hnVOBu+b5IrcPcivWBIPQBNJp2svD/GVFWZQsKXshZA3meiRO+/k3qjBh7aDaakW
...etc
-----END RSA PRIVATE KEY-----
我将其与Python RSA库一起加载:

import rsa

with open('somefile.pem', mode='rb') as privatefile:
    keydata = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1(keydata)
print(type(privkey))
print(privkey)
这将输出括号中的五个十进制数字,如:

<class 'rsa.key.PrivateKey'>
PrivateKey(1234..., 7889..., etc)

私钥(1234…,7889…,等)
如何将这些数字或类转换为“二进制数组”(这是将密钥传递给API)

更新 我猜“二进制”是DER格式


参考:

正在生成
rsa.PrivateKey
对象的文本表示,如下所示:

    def __repr__(self) -> str:
        return 'PrivateKey(%i, %i, %i, %i, %i)' % (self.n, self.e, self.d, self.p, self.q)
因此,如果您想要这些值的数组,您可以只写:

privkey = rsa.PrivateKey.load_pkcs1(keydata)
privkey_array = [privkey.n, privkey.e, privkey.d, privkey.p, privkey.q]

不幸的是,RSA私钥没有单一的标准格式,您必须检查API以了解它们具体需要什么。您正在使用的软件包似乎喜欢PKCS#1私钥格式,您只需调用
priv_key.save_pkcs1('DER')
,就可以得到它,正如您猜测的那样,DER是二进制格式。一种更为普遍接受的私钥格式是PKCS#8,因此请注意,以防您的API似乎不接受您的密钥。Python RSA不支持此格式,请参阅讨论。