You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于pyca/cryptography中BestAvailableEncryption加密算法选择的问询

关于BestAvailableEncryption的算法选择与查询方案

算法选择逻辑与文档说明

  • BestAvailableEncryption完全依赖底层OpenSSL实现,pyca cryptography仅作为调用层,不介入算法选择逻辑。它在调用OpenSSL的PKCS12_create函数时,会传入让OpenSSL自动选择最优加密算法的参数。
  • OpenSSL的官方文档(man PKCS12_create)明确了自动选择规则:不同版本优先算法不同,OpenSSL 1.1.1及以上版本默认优先使用AES-256-CBC,旧版本(如1.0.2)则默认使用3DES。
  • 无需直接阅读OpenSSL源码,通过其官方man文档即可了解选择流程。

Python层面查询实际使用的加密算法

没有直接的API可以在生成PKCS12前预知BestAvailableEncryption会选用的算法,但可以通过反向解析生成的PKCS12数据来确认:

  • 方法一:使用OpenSSL命令行工具(最直接可靠)
    将生成的二进制PKCS12数据写入临时文件后,执行命令:
    openssl pkcs12 -info -in temp.p12 -noout
    
    输出内容中会明确显示加密算法(例如PKCS7 Encrypted data: pbeWithSHA1AndAES-256-CBC, Iteration 2048)。
  • 方法二:结合cryptography解析(仅能间接验证,无法直接获取算法标识)
    解析生成的PKCS12数据,若能正常解密,说明算法与OpenSSL当前最优匹配:
    from cryptography.hazmat.primitives import serialization
    
    # 解析生成的PKCS12二进制数据
    private_key, cert, cas = serialization.pkcs12.load_key_and_certificates(
        pkcs12_best_encryption,
        passphrase=passphrase,
    )
    

确定pkcs12_best_encryption对象中的加密算法

pkcs12_best_encryption是二进制的PKCS12格式数据,无法直接从Python对象中提取算法信息,必须通过解析实现:

  • 最简便的方式是使用上述OpenSSL命令行工具,将二进制数据写入临时文件后执行解析命令。
  • 若需通过Python代码实现,可借助pyopenssl库解析PKCS12的ASN.1结构:
    from OpenSSL import crypto
    
    # 加载PKCS12数据
    p12 = crypto.load_pkcs12(pkcs12_best_encryption, passphrase)
    # 获取加密算法详情(需解析ASN.1结构,示例仅展示加载方式)
    pkcs7 = p12.get_pkcs7()
    # 进一步解析PKCS7的加密信息可获取算法标识
    

内容的提问来源于stack exchange,提问作者TheScriptGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:36