【问题标题】:How to set cipher mode in pyOpenSSL?如何在 pyOpenSSL 中设置密码模式?
【发布时间】:2021-03-15 16:45:38
【问题描述】:

我正在尝试将此 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 模式,我将不胜感激。

【问题讨论】:

    标签: python openssl rsa pyopenssl


    【解决方案1】:

    对于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() 兼容,也不知道该列表是否详尽(除了别名)。

    【讨论】:

    • 非常感谢!事实上,'aes-256-cbc' 与 dump_privatekey() 兼容并且该命令现在可以工作。也感谢您提供有用的 openssl 命令!
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2020-05-13
    • 2013-05-15
    相关资源
    最近更新 更多