Python 3.8中的MD4 hashlib支持

a9wyjsp7  于 2023-04-08  发布在  Python
关注(0)|答案(3)|浏览(296)

我正在尝试为使用NTLM身份验证的服务器实现一个soap客户端。我使用的库(requests-ntlm 2,它依赖于ntlm-auth)通过标准库的hashlib实现了位于NTLM协议核心的MD 4算法。
虽然hashlib似乎支持MD 4:

>>> 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:不支持的哈希类型md 4错误。以下是追溯的相关部分:

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调用MD 4,也会得到相同的结果:

>>> 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

任何关于正在发生的事情和/或任何帮助的见解将不胜感激。

jv2fixgn

jv2fixgn1#

对于ubuntu(jammy/focal)。

将其添加到您的/etc/ssl/openssl.cnf中以“重新启用”md 4到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
根据您的版本或发行版,openssl.cnf文件的路径可以是/usr/lib/openssl.cnf或其他。

qij5mzcb

qij5mzcb2#

好吧,看起来我的conda环境中有些东西被破坏了。我创建了一个新的相同的环境,从那以后它一直在工作,而不需要改变任何其他东西。

06odsfpq

06odsfpq3#

hashlib.new('md4', "test".encode()).hexdigest()

相关问题