2012-04-02 111 views
7

通过使用该命令,我已经能够创建一个受DES3密码保护的RSA密钥(以及... 我认为,因为我对这个加密世界非常陌生) :PyCrypto:生成受DES3密码保护的RSA密钥

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

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

当然我可以随时拨打os.execute,并执行上面的命令,但我会考虑“作弊”:-)。我非常想学习PyCrypto。

预先感谢您。

回答

6

从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

+0

工作就像一个魅力!我得到了几乎与openssl命令相同的输出:Proc-Type:4,ENCRYPTED DEK-Info:DES-EDE3-CBC,F7149C8E62E0854B 4fUV/FmaMmL7qZH83 + ocigFy [...] – BorrajaX 2012-04-03 15:49:04

+0

为了让我明白,那意味着命令exportedKey = key.exportKey('PEM','my secret',pkcs = 1)从密码'my secret'生成RSA密钥? 'PEM'和pkcs是否有安全隐患? – 2013-12-08 04:15:06

+0

调用方法'generate'时会创建RSA密钥。 'export'方法将其采用PEM格式进行编码。 PEM和PKCS格式对我来说没有明显的安全弱点。有趣的是3DES密钥是如何从密码派生出来的:它模仿'openssl',它使用了相当过时的算法。 – SquareRootOfTwentyThree 2013-12-08 17:02:22