运行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调用逻辑:
- 先安装依赖包:
pip install scrypt
- 在你的代码最开头补充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版本:
- 先安装OpenSSL开发包:
- Ubuntu/Debian 系:
sudo apt install libssl-dev - CentOS/RHEL 系:
sudo yum install openssl-devel
- Ubuntu/Debian 系:
- 下载对应版本Python源码包,编译时指定OpenSSL路径:
./configure --with-openssl=/usr/local/ssl # 替换为你的实际OpenSSL安装路径 make -j$(nproc) sudo make altinstall
- 使用新编译的Python版本重建虚拟环境,重新安装所有依赖即可。
方法3:替换加密库
如果以上方案都不适用,可以放弃cryptocode,改用无scrypt强依赖的加密库如cryptography,仅需少量修改加密解密逻辑即可正常运行。
内容的提问来源于stack exchange,提问作者Trismegistos
相关产品推荐
相关产品推荐

