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

如何解决升级后Python3.9无法正常调用scrypt加密算法的问题

根因说明

Python调用OpenSSL的逻辑

  • 无论是CPython内置的hashlib模块,还是第三方cryptography库,都是在软件编译构建阶段检测依赖的OpenSSL的功能支持列表,而非运行时动态识别OpenSSL的可用算法。编译时检测到的特性开关会直接固化到最终生成的二进制文件中。
  • 你遇到的现象不属于动态链接异常:你已经验证cryptography可以正确读取当前OpenSSL的版本号,说明两者的动态链接关系完全正常,问题出在编译阶段的特性检测结果。

为什么OpenSSL支持scrypt但Python识别不到

你的嵌入式系统升级时应该仅替换了OpenSSL的动态库文件,没有基于新版OpenSSL重新编译Python 3.9和cryptography库:

  • 编译Python 3.9时如果依赖的OpenSSL版本低于1.1.0,或者编译配置关闭了scrypt支持,最终生成的Python二进制就会直接去掉hashlib.scrypt的相关实现,即使后续升级OpenSSL动态库也不会恢复。
  • 编译cryptography库时如果检测到当时的OpenSSL不支持scrypt,就会默认关闭ScryptBackend的相关实现,后续即使链接了支持scrypt的新版OpenSSL,也不会启用该后端,就会抛出你遇到的UnsupportedAlgorithm异常。
解决方案
  1. 重新编译Python 3.9:编译时确保依赖当前已安装的新版OpenSSL 1.1.1l,编译完成后即可直接使用hashlib.scrypt的内置实现,无需额外依赖。
  2. 重新编译cryptography库:在当前新版OpenSSL环境下重新编译安装cryptography,编译过程会自动检测到OpenSSL的scrypt支持并启用对应后端,原有调用Scrypt类的代码无需修改即可正常运行。
  3. 独立安装scrypt实现:也就是你已经采用的方案,直接安装python3-scrypt库,该库自带独立的scrypt算法实现,不依赖系统OpenSSL的功能支持,兼容性最强,适合嵌入式场景快速修复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:57:02