【问题标题】:PyCrypto: Generate RSA key protected with DES3 passwordPyCrypto:生成受 DES3 密码保护的 RSA 密钥
【发布时间】:2012-04-02 15:39:58
【问题描述】:

我已经能够使用以下命令创建一个受密码保护的 RSA 密钥 DES3(嗯...我认为因为我对这个加密世界很陌生):

openssl genrsa -out "/tmp/myKey.pem" -passout pass:"f00bar" -des3 2048

现在,如果可能,我想在 Python 脚本中使用 PyCrypto。我见过this message,这似乎不鼓励使用 PyCrypto 来做到这一点。还是这样吗?

当然我可以随时调用os.execute,并执行上面的命令,但我认为这是“作弊”:-)。我这样做是为了学习 PyCrypto。

提前谢谢你。

【问题讨论】:

    标签: python encryption rsa des pycrypto


    【解决方案1】:

    从 PyCrypto 2.5 开始,您可以导出一个 RSA 私钥并使用密码保护它。三重 DES 密钥是从密码短语内部派生的,用于执行实际加密。

    例如:

    from Crypto import RSA
    from Crypto import Random
    
    random_generator = Random.new().read
    key = RSA.generate(1024, random_generator)
    exportedKey = key.exportKey('PEM', 'my secret', pkcs=1)
    

    变量 exportedKey 包含密钥的 ASCII 版本 (PEM),根据 PKCS#1(一种加密标准。另一个选项是 pkcs=8 进行编码 - 猜猜 - PKCS#8)。由于结果是标准的,您可以将它与其他几个程序一起使用,包括 openssl。 当然,您也可以通过 PyCrypto 将其重新导入 python!

    exportKey 方法记录在 here

    【讨论】:

    • 像魅力一样工作!我得到了与 openssl 命令几乎相同的输出:Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,F7149C8E62E0854B 4fUV/FmaMmL7qZH83+ocigFy [...]
    • 为了让我理解,这意味着命令exportedKey = key.exportKey('PEM', 'my secret', pkcs=1) 从密码'my secret' 生成RSA 密钥? 'PEM' 和 pkcs 是否有安全隐患?
    • RSA 密钥在调用generate 方法时创建。 export 方法接受它并以 PEM 格式对其进行编码。 PEM 和 PKCS 格式没有明显的(对我而言)安全弱点。有趣的一点是 3DES 密钥是如何从密码中派生出来的:模仿 openssl,它使用了一种相当过时的算法。