开发者社区> 问答> 正文

Python MD4函数无法像在线MD4哈希生成器中那样生成哈希代码

从Python生成的MD4哈希码不同于在线。我知道一定是由于编码。你能帮我吗?

from Crypto.Hash import MD4

psk = 'The quick brown fox jumps over the lazy dog'

h = MD4.new()
h.update(psk.encode('UTF-16LE'))
print(f'UTF-16LE: {h.hexdigest()}')

h.update(psk.encode('UTF-16'))
print(f'UTF-16:   {h.hexdigest()}')

h.update(psk.encode('UTF-8'))
print(f'UTF8:     {h.hexdigest()}')

h.update(psk)
print(f'UTF8?:    {h.hexdigest()}')

使用不同编码的“快速的棕色狐狸跳过懒狗”的哈希输出为:

UTF-16LE: 4e6a076ae1b04a815fa6332f69e2e231
UTF-16:   db8ae265b09c6ffa1e2fc163d66f64a4
UTF8:     324563ee68cc8009c82778d70d958723
UTF8?:    1aaf934b705b1d2aab69b0cf2a9cd87b

在线MD4哈希函数(https://emn178.github.io/online-tools/md4.html)会给出

1bee69a46ba811185c194762abaeae90

更新

感谢您的评论,我已经更新了代码:

import getpass
from Crypto.Hash import MD4

psk = 'The quick brown fox jumps over the lazy dog' #getpass.getpass()

h = MD4.new(data=psk.encode('UTF-16LE'))
print(f'UTF-16LE: {h.hexdigest()}')

h = MD4.new(data=psk.encode('UTF-16'))
print(f'UTF-16:   {h.hexdigest()}')

h = MD4.new(data=psk.encode('UTF-8'))
print(f'UTF8:     {h.hexdigest()}')

h = MD4.new(data=psk)
print(f'UTF8?:    {h.hexdigest()}')

新的输出是

UTF-16LE: 4e6a076ae1b04a815fa6332f69e2e231
UTF-16:   c6274a58a30e434503b45d2ce95e6c19
UTF8:     1bee69a46ba811185c194762abaeae90
UTF8?:    1bee69a46ba811185c194762abaeae90

我还发现https://emn178.github.io/online-tools/md4.html使用UTF-16,即使我将其传递给UTF-16LE编码的文件也是如此。

WPA2 Enterprise要求文本以UTF-16LE编码。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 18:57:20 1132 0
1 条回答
写回答
取消 提交回答
  • 使用update显然可以更新哈希,这意味着您可以提供更多的消息。因此,实际上您实际上是使用不同的编码多次输入字符串,这最终给出的哈希值不仅仅是字符串。

    如果仅更新一次,您将获得预期的结果。

    from Crypto.Hash import MD4
    
    psk = 'The quick brown fox jumps over the lazy dog'
    
    h = MD4.new()
    
    h.update(psk.encode('UTF-8'))
    print(f'UTF8:     {h.hexdigest()}')
    

    从摘要的文档中,hexdigest方法是派生的:

    返回到目前为止传递给update()方法的字符串的摘要。这是一个digest_size字节的字符串,可能包含非ASCII字符,包括空字节。

    回答来源:stackoverflow

    2020-03-23 18:57:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载