【问题标题】:Saving RSA keys to a file, using pycrypto使用 pycrypto 将 RSA 密钥保存到文件中
【发布时间】:2012-02-08 16:33:45
【问题描述】:

我正在使用 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 的函数。

以前有人做过吗?

【问题讨论】:

    标签: python pycrypto


    【解决方案1】:

    keys.exportKey() 为私钥,keys.publickey().exportKey() 为公钥。您可以使用format 参数更改输出格式,请参阅docs at this site

    【讨论】:

    • 好的,经过一番研究,找到了exportKey的doc。它在 _RSAobj 文档中。点击show private查看。
    • 既然您已经将它们导出到一个文件中,那么当您读取该文件时,有没有办法将它们导入回python/pycrypto?
    • @CharlieParker RSA.importKey
    【解决方案2】:

    以下代码将创建 RSA 密钥对并将它们存储在 PEM 文件中并打印出来。

    原始学分:来自这篇文章的 wRAR 和来自 [pyOpenSSL creating a pem file

    的 AJ poultier
    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)
    

    【讨论】:

      【解决方案3】:

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

      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=
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多