我试图为使用NTLM身份验证的服务器实现soap客户端。我使用的库(requests ntlm2,它依赖于ntlm2)通过标准库的hashlib实现了位于NTLM协议核心的MD4算法。
尽管hashlib似乎支持MD4:
>>> import hashlib
>>> hashlib.algorithms_available
{'md5-sha1', 'md4', 'shake_128', 'md5', 'blake2s', 'sha3_512', 'ripemd160', 'sha512', 'mdc2', 'blake2b', 'sha3_256', 'sha3_224', 'sha512_224', 'sha1', 'sha384', 'sha256', 'sha224', 'whirlpool', 'sha512_256', 'sha3_384', 'shake_256', 'sm3'}
>>>
我的系统中的openssl库也是如此:
(victory) C:\code\python\services>openssl
help:
[...]
Message Digest commands (see the `dgst' command for more details)
blake2b512 blake2s256 md4 md5
mdc2 rmd160 sha1 sha224
sha256 sha3-224 sha3-256 sha3-384
sha3-512 sha384 sha512 sha512-224
sha512-256 shake128 shake256 sm3
[...]
当身份验证试图运行python时,会生成一个ValueError:不支持的哈希类型md4错误。以下是追溯过程的相关部分:
C:\ProgramData\Miniconda3\envs\victory\lib\site-packages\ntlm_auth\compute_hash.py in _ntowfv1(password)
165 return nt_hash
166
--> 167 digest = hashlib.new('md4', password.encode('utf-16-le')).digest()
168
169 return digest
C:\ProgramData\Miniconda3\envs\victory\lib\hashlib.py in __hash_new(name, data, **kwargs)
161 # This allows for SHA224/256 and SHA384/512 support even though
162 # the OpenSSL library prior to 0.9.8 doesn't provide them.
--> 163 return __get_builtin_constructor(name)(data)
164
165
C:\ProgramData\Miniconda3\envs\victory\lib\hashlib.py in __get_builtin_constructor(name)
118 return constructor
119
--> 120 raise ValueError('unsupported hash type ' + name)
121
122
ValueError: unsupported hash type md4
即使我只是尝试从hashlib调用MD4,也会得到相同的结果:
>>> import hashlib
>>> hashlib.new('md4')
Traceback (most recent call last):
File "C:\ProgramData\Miniconda3\envs\victory\lib\hashlib.py", line 157, in __hash_new
return _hashlib.new(name, data)
ValueError: [digital envelope routines] initialization error
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\ProgramData\Miniconda3\envs\victory\lib\hashlib.py", line 163, in __hash_new
return __get_builtin_constructor(name)(data)
File "C:\ProgramData\Miniconda3\envs\victory\lib\hashlib.py", line 120, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type md4
任何关于正在发生的事情和/或任何帮助的洞察力都将受到极大的赞赏。
发布于 2022-03-26 05:14:18
我的conda环境里好像有什么东西坏了。我创造了一个新的相同的一个,从那以后,它一直在工作,而不必改变任何其他东西。
发布于 2022-06-29 12:09:09
为了乌本图酱。
将其添加到您的/usr/lib/openssl.cnf
中,以“重新启用”md4到hashlib
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
这个https://bugs.launchpad.net/ubuntu/+source/python3.10/+bug/1971580/comments/3的解决方案
发布于 2022-09-16 04:43:03
跟着@imbr转到"For ubuntu jammy“
我发现在我的系统中它没有做任何事情来编辑/添加文件/usr/lib/openssl.cnf
,两个小时后我发现这是因为我在/etc/ssl/openssl.cnf
上有一个文件,它附带了Ubuntu中的openssl
包。来源:https://packages.ubuntu.com/jammy/amd64/openssl/filelist
在配置中合并@imbr修复了问题:D
provider_sect默认= default_sect旧式= legacy_sect default_sect activate =1 legacy_sect default_sect=1
备注:,我正在做一个新的帖子,因为我没有足够的堆栈溢出声誉,直接评论@imbr的帖子
https://stackoverflow.com/questions/69938570
复制