关于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 -nooutPKCS7 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
相关产品推荐
相关产品推荐

