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

运行cryptocode报错module 'hashlib' has no attribute 'scrypt'如何解决

错误根源

hashlib.scrypt 依赖系统预装的OpenSSL版本≥1.1.0,且编译Python时必须启用对应OpenSSL绑定。CentOS7等老旧Linux发行版默认自带的OpenSSL版本为1.0.2,本身就不支持scrypt接口。即便你事后更新了OpenSSL版本,此前编译完成的Python也不会自动关联新的OpenSSL,所以直接重装原有Python版本无法解决问题。

解决方案

方法1:代码层Patch(无需调整环境,最快捷)

通过独立scrypt库给hashlib补全scrypt方法,完全兼容原有cryptocode调用逻辑:

  1. 先安装依赖包:
pip install scrypt
  1. 在你的代码最开头补充Patch逻辑,原有业务代码无需修改:
import hashlib
import scrypt

# 补全hashlib的scrypt方法
if not hasattr(hashlib, 'scrypt'):
    def scrypt_patch(password, *, salt, n, r, p, maxmem=0, dklen=64):
        return scrypt.hash(password, salt, N=n, r=r, p=p, buflen=dklen)
    hashlib.scrypt = scrypt_patch

# 后续再导入cryptocode,运行原有逻辑
import cryptocode

password = "This is a test"
key = "My Key"


def encrypt(password, key):
    return cryptocode.encrypt(password, key)


def decrypt(encryptetpass):
    return cryptocode.decrypt(encryptetpass, key)


encrypted_pass = encrypt(password, key)
print(encrypted_pass)

print(decrypt(encrypted_pass))

方法2:重新编译Python关联新版OpenSSL

不想修改代码可以重新编译Python,让其绑定符合要求的OpenSSL版本:

  1. 先安装OpenSSL开发包:
    • Ubuntu/Debian 系:sudo apt install libssl-dev
    • CentOS/RHEL 系:sudo yum install openssl-devel
  2. 下载对应版本Python源码包,编译时指定OpenSSL路径:
./configure --with-openssl=/usr/local/ssl # 替换为你的实际OpenSSL安装路径
make -j$(nproc)
sudo make altinstall
  1. 使用新编译的Python版本重建虚拟环境,重新安装所有依赖即可。

方法3:替换加密库

如果以上方案都不适用,可以放弃cryptocode,改用无scrypt强依赖的加密库如cryptography,仅需少量修改加密解密逻辑即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:45:00