生成使用AES加密的RSA私钥
我刚接触加密技术,正在玩 openssl。opensssl 有一个命令可以生成用 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 加密的。那么,如何才能用 PyCrypto 创建一个像上面那样用 AES 加密的私钥呢?
1 个回答
2
AES加密RSA密钥的功能只会在PyCrypto 2.7中支持(现在网站上有一个测试版可以下载)。不过,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')