如何在 pyOpenSSL 中设置密码模式?
How to set cipher mode in pyOpenSSL?
我正在尝试将此 cli 命令翻译成 python:openssl genpkey -aes-256-cbc -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out my-private-key.pem
到目前为止,我找到的最佳选择是 pyOpenSSL,但是,我似乎无法设置 cbc 密码模式。目前我的代码是这样的:
gen_key = OpenSSL.crypto.PKey()
gen_key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, gen_key, cipher='aes256', passphrase=b"some_passphrase")
然而,这只指定了密码,而不是它的模式。当我尝试使用 cipher='aes256-cbc'
或 cipher='aescbc256'
指定密码时,出现无效密码名称错误。如果有人可以帮助我将 aes256 密码设置为 cbc 模式,我将不胜感激。
对于ciphername
参数,可以使用命令openssl list -cipher-commands
打印出的算法名称。在那里您会看到提到的 aes-256-cbc
,这是您要查找的名称。
您可以以不区分大小写的方式使用这些密码,其中列出的大多数密码都有您也可以使用的别名。例如,如果您使用 openssl -list -cipher-algorithms
,您会注意到
aes256 => AES-256-CBC
原来你已经在使用 CBC 模式了。
您也可以通过将生成的 PEM 提供给 openssl asn1parse
命令来验证这一点,它是这样开始的(我在代码中添加了一个打印语句来打印 PEM):
$ python dumpkey.py | openssl asn1parse
0:d=0 hl=4 l=1325 cons: SEQUENCE
4:d=1 hl=2 l= 87 cons: SEQUENCE
6:d=2 hl=2 l= 9 prim: OBJECT :PBES2
17:d=2 hl=2 l= 74 cons: SEQUENCE
19:d=3 hl=2 l= 41 cons: SEQUENCE
21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
32:d=4 hl=2 l= 28 cons: SEQUENCE
34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:DAA5C15B1DB3C8CF
44:d=5 hl=2 l= 2 prim: INTEGER :0800
48:d=5 hl=2 l= 12 cons: SEQUENCE
50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256
60:d=6 hl=2 l= 0 prim: NULL
62:d=3 hl=2 l= 29 cons: SEQUENCE
64:d=4 hl=2 l= 9 prim: OBJECT :aes-256-cbc
我不确定 list -cipher-commands
中提到的所有名称是否都与 dump_privatekey()
兼容,也不确定该列表是否详尽无遗(别名除外)。
我正在尝试将此 cli 命令翻译成 python:openssl genpkey -aes-256-cbc -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out my-private-key.pem
到目前为止,我找到的最佳选择是 pyOpenSSL,但是,我似乎无法设置 cbc 密码模式。目前我的代码是这样的:
gen_key = OpenSSL.crypto.PKey()
gen_key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, gen_key, cipher='aes256', passphrase=b"some_passphrase")
然而,这只指定了密码,而不是它的模式。当我尝试使用 cipher='aes256-cbc'
或 cipher='aescbc256'
指定密码时,出现无效密码名称错误。如果有人可以帮助我将 aes256 密码设置为 cbc 模式,我将不胜感激。
对于ciphername
参数,可以使用命令openssl list -cipher-commands
打印出的算法名称。在那里您会看到提到的 aes-256-cbc
,这是您要查找的名称。
您可以以不区分大小写的方式使用这些密码,其中列出的大多数密码都有您也可以使用的别名。例如,如果您使用 openssl -list -cipher-algorithms
,您会注意到
aes256 => AES-256-CBC
原来你已经在使用 CBC 模式了。
您也可以通过将生成的 PEM 提供给 openssl asn1parse
命令来验证这一点,它是这样开始的(我在代码中添加了一个打印语句来打印 PEM):
$ python dumpkey.py | openssl asn1parse
0:d=0 hl=4 l=1325 cons: SEQUENCE
4:d=1 hl=2 l= 87 cons: SEQUENCE
6:d=2 hl=2 l= 9 prim: OBJECT :PBES2
17:d=2 hl=2 l= 74 cons: SEQUENCE
19:d=3 hl=2 l= 41 cons: SEQUENCE
21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
32:d=4 hl=2 l= 28 cons: SEQUENCE
34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:DAA5C15B1DB3C8CF
44:d=5 hl=2 l= 2 prim: INTEGER :0800
48:d=5 hl=2 l= 12 cons: SEQUENCE
50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256
60:d=6 hl=2 l= 0 prim: NULL
62:d=3 hl=2 l= 29 cons: SEQUENCE
64:d=4 hl=2 l= 9 prim: OBJECT :aes-256-cbc
我不确定 list -cipher-commands
中提到的所有名称是否都与 dump_privatekey()
兼容,也不确定该列表是否详尽无遗(别名除外)。