我是加密新手并且一直在使用openssl。 openssl中有一个命令用于生成使用AES包装的RSA私钥:
openssl genrsa -aes128
样本结果将是:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,7787EC23BAB71A7E339FA4BB5B197362
Sqmr8Zb8..bla..blaa
-----END RSA PRIVATE KEY-----
在PyCrypto中,我们可以使用以下方法构建类似的私钥:
from Crypto.PublicKey import RSA
key = RSA.generate(1024).exportKey('PEM', 'secret')
哪个会产生
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,760A8103AA096360
HxGmbla..blaa
-----END RSA PRIVATE KEY-----
注意结果是使用三重DES包装的。创建使用AES包装的私钥的正确方法是什么,例如上面使用PyCrypto?
答案 0 :(得分:1)
看起来没有,通过源代码,您可以快速找到exportKey
中PKCS#8加密私钥的硬编码部分:
protection = 'PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC'
这似乎符合PEM标题中的信息。
答案 1 :(得分:1)
RSA密钥的AES加密仅在PyCrypto 2.7中受支持(目前网站上有一个alpha版本)。但是,AES加密将应用于PKCS#8级别(二进制)而不是PEM级别(文本信封)。
这不是你要求的,但它更好,因为用于PEM的关键拉伸程序并不安全。
你会这样做:
from Crypto.PublicKey import RSA
key = RSA.generate(2048)
print key.exportKey('PEM', 'secret', pkcs=8, protection='PBKDF2WithHMAC-SHA1AndAES256-CBC')