Pep*_*uez 11 python hashlib ripemd
经过彻底的搜索,我在整个网络上都没有找到这个非常常见的问题的完整解释和解决方案。所有需要使用 hashlib 进行编码的脚本都会给我错误:
Python 3.10
import hashlib
h = hashlib.new('ripemd160')
Run Code Online (Sandbox Code Playgroud)
返回:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.10/hashlib.py", line 166, in __hash_new
return __get_builtin_constructor(name)(data)
File "/usr/lib/python3.10/hashlib.py", line 123, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type ripemd160
Run Code Online (Sandbox Code Playgroud)
我已经尝试检查该哈希值是否存在于库中,以及是否有:
print(hashlib.algorithms_available):{'md5','sm3','sha3_512','sha384','sha256','sha1','shake_128','sha224','sha512_224','sha512_256','blake2b','ripemd160 ', 'md5-sha1'、'sha512'、'sha3_256'、'shake_256'、'sha3_384'、'漩涡'、'md4'、'blake2s'、'sha3_224'}
我在 Linux 的 vps 中遇到这个问题,但在我的电脑上使用 Windows,没有这个问题。
我真诚地感谢任何帮助或建议。
str*_*ars 22
Hashlib 对ripemd160 使用 OpenSSL,显然 OpenSSL 在 2021 年 11 月的 3.0 版本左右禁用了一些较旧的加密算法。所有功能仍然存在,但需要手动启用。有关详细信息,请参阅OpenSSL github 项目的问题 16994。
要快速启用它,请通过运行以下命令找到保存 OpenSSL 配置文件或其符号链接的目录:
openssl version -d
Run Code Online (Sandbox Code Playgroud)
您现在可以转到该目录并编辑配置文件(可能需要使用 sudo):
nano openssl.cnf
Run Code Online (Sandbox Code Playgroud)
确保配置文件包含以下行:
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
Run Code Online (Sandbox Code Playgroud)
测试环境:OpenSSL 3.0.2、Python 3.10.4、Linux Ubuntu 22.04 LTS aarch64,目前我无法访问其他平台。
| 归档时间: |
|
| 查看次数: |
11754 次 |
| 最近记录: |