Python 保存RSA ;文件的密钥,使用pycrypto

Python 保存RSA ;文件的密钥,使用pycrypto,python,pycrypto,Python,Pycrypto,我正在使用PyCrypto 2.3,我想将生成的密钥保存到一个文件中,以便将它们分发到客户端和服务器。我似乎找不到正确打印钥匙的方法,在互联网上也找不到示例 def resetKeys(self): keys = RSA.generate(1024) privHandle = open(self.privateKeyFile, 'wb') privHandle.write(keys.privatekey()) privHa

我正在使用PyCrypto 2.3,我想将生成的密钥保存到一个文件中,以便将它们分发到客户端和服务器。我似乎找不到正确打印钥匙的方法,在互联网上也找不到示例

    def resetKeys(self):
        keys = RSA.generate(1024)

        privHandle = open(self.privateKeyFile, 'wb')
        privHandle.write(keys.privatekey())
        privHandle.close()

        pubHandle = open(self.publicKeyFile, 'wb')
        pubHandle.write(keys.publickey())
        pubHandle.close()
此代码不起作用的原因有很多:首先,
keys.publickey()
似乎不可打印,它返回:

    <_RSAobj @0x10f810d0 n(1024),e>

其次,
keys
没有名为
privatekey
的函数


以前有人这样做过吗?

keys.exportKey()
用于私钥,而
keys.publickey().exportKey()用于公钥。您可以使用
format
参数更改输出格式,请参见。

下面的代码将创建RSA密钥对,并将其存储在PEM文件中以及打印它们

原创作品:来自本帖的wRAR和来自[


下面是使用PKCS->DER序列(二进制或PEM编码)生成长度为2048的密钥的示例


好的,经过一些研究,找到了
exportKey
的文档。它在_RSAobj文档中。单击
show private
查看它。现在您已经将它们导出到一个文件中,当您阅读该文件时,有没有办法将它们导入回python/pycrypto?@CharlieParker
RSA.importKey
from Crypto.PublicKey import RSA
private_key = RSA.generate(1024)
public_key = private_key.publickey()
print(private_key.exportKey(format='PEM'))
print(public_key.exportKey(format='PEM'))

with open ("private.pem", "w") as prv_file:
    print("{}".format(private_key.exportKey()), file=prv_file)

with open ("public.pem", "w") as pub_file:
    print("{}".format(public_key.exportKey()), file=pub_file)
from Crypto.PublicKey import RSA

private_key_start_comment = '-----BEGIN RSA PRIVATE KEY-----'
private_key_end_comment = '-----END RSA PRIVATE KEY-----'
public_key_start_comment = '-----BEGIN PUBLIC KEY-----'
public_key_end_comment = '-----END PUBLIC KEY-----'

keypair = RSA.generate(2048)
pubkey = keypair.publickey()

public_key_pem = pubkey.exportKey(format='PEM', passphrase=None, pkcs=1)
public_key_final = str(public_key_pem.decode('ascii')).replace('\n','').replace(public_key_start_comment,'').replace(public_key_end_comment,'').replace(' ','')
print('\n public_key_final - ' + public_key_final)

private_key_pem = keypair.exportKey(format='PEM', passphrase=None, pkcs=1)
private_key_final = str(private_key_pem.decode('ascii')).replace('\n','').replace(private_key_start_comment,'').replace(private_key_end_comment,'').replace(' ','')
print('\n private_key_final - ' + private_key_final)

Sample Output:

public_key_final - MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUC4fYGPHPTraHoozf8xkSwHL4pPqcleSTtiOXvx8X4eJ7D8UAFSi5EkgGfNhzM/EWTUfPLuAH948eJorB25giVnJRzEShvsBVFVF0uTS9avwQWD1EWIoc60cH4l6GuqoAckLtqpUOvHglwBJvjeR4WenxQHV/U7WgJfou04RZQ3sosrg1hfNoWJo79LUzjzPHe+WKqXri0rtLj/JAKofQzs1mWkRKvZkGvWVk/AjCurKs/bjMuCmBd7fddL3XvOAu7bw+tETFyT54nkIOQq2Sw4I8fvcNeA6uNJL6EZMUgSj2GYXAJLOc+bwon6fH95LwaXLliMgF4FXjMlo5sbfwIDAQAB

private_key_final - MIIEogIBAAKCAQEAvUC4fYGPHPTraHoozf8xkSwHL4pPqcleSTtiOXvx8X4eJ7D8UAFSi5EkgGfNhzM/EWTUfPLuAH948eJorB25giVnJRzEShvsBVFVF0uTS9avwQWD1EWIoc60cH4l6GuqoAckLtqpUOvHglwBJvjeR4WenxQHV/U7WgJfou04RZQ3sosrg1hfNoWJo79LUzjzPHe+WKqXri0rtLj/JAKofQzs1mWkRKvZkGvWVk/AjCurKs/bjMuCmBd7fddL3XvOAu7bw+tETFyT54nkIOQq2Sw4I8fvcNeA6uNJL6EZMUgSj2GYXAJLOc+bwon6fH95LwaXLliMgF4FXjMlo5sbfwIDAQABAoIBAA1fIcnoWgrDOVDP9MsdQUzPDhDrVlaaPjmxYu7J1Z3o+ct3I1Spy0HGNwyFiQ2I7udVNvg/F9bcKtj4VMn4ba+G4gNKxYmw8Fut0/PJ6LXejNt3/skEQrOgDbq3BwmlddBJwOI4m+b2Scnpo0E0K0xlYgA+Y4hw8MkaytQRq7yqrW31uq7ueN2eJH+akpBiG7MWfEqP3UonWhSfl2yGIc/5rhF/5FcEnKGfSuiLJAE/Bzlv59ozi/+P9UPeIN95QThQL8+nThzD078L0X4ZeFkJrcXQwjkY5pIrBjOckrXFFxWdO3faYE1VAiTjoGTJjBX+F5YA3MOHRtkak7zl8HECgYEAwkbs+KCpL+VDdPSXagMrd+UcbvxCjpUXZsbkxM9OLjhaJbbjJojkSchgBcci7e9xm5Zj1vCFem2WyRmohmlk/WTu+nRpxPTw4veBDFXgRbwXZaxXryMBEZLiOrZ/ZK0SVwLtGxAFJ4z0ZhDOtUofpGwGRVGoE1btvC0euEst6FECgYEA+WEpA1S63H6emEco3bGmXpwJ76/EuuU/OHMc9BWJwDnyGuYD0CRFodjNSPPnGtlfj1jC910WcpW0NHXaMtuo3mg9S6lIgsr/ooPdW9HRQZshjF1enOpYJz9efxUa1PpPnUS7apPznyTkTjgWliPBKx2awXp6Mhknnqt8e7+pos8CgYBiUqL78dOuecl6F4/KB3CobTvGr8S/hJUjXuXI9WIL4lk9XSH5Dq766H4wbmgvI0/L/oDo9zGWlIALpwCzhgOmer634tLk61I+jCSzqYKnyFnPCzoVWRHhYwU70cEHos/1WXXGjIUPTzchsL/s4GbDQCisTHdT0lrfMbaqbuH9AQKBgC8Vzz6Xwuha5+rslKS3JCh84ctlrolzO2qXIYJchrPKvRGjGFk2YAdc/fWmR55kKIzSP42g/9oGtg2pqtcrbkj/+YLNpak8VuQCbcsmZJI0jjMIdhK+lIJkjp0ECRrpYBrbnV9ULA2CU7EJGgqjGZfgcRXS4DuRUE+/JTPgTlE1AoGAJsDjhHbcw3ftuQBM5lwlXiLRhgmCrNhfMzRS9HR2sBZU+LKrq0QLjYyLPf0GBPzKkGWV0rLpYpVIhJF0fbF58DSPMuKF/2VsbWVizVWuWCrMuasgM71wTCB0/+V4qS3wbEeHP8BMw6PtnIHEW8vsZaiuZCLOY+h9lOs+tBBKO98=