Python 3 个相同的文本但不同的 md5 哈希值

Python 3 same text but different md5 hashes

我有一个相对简单的文本处理算法,它从文本文件中导入一些单词并生成一个短语。如果启用设置标志(一个简单常量),该算法可以采用第二条路径。第二条路径基本上是一个额外的列表理解,过滤掉一些单词。

在这两种情况下,算法都会生成相同的短语(下面的 str1str2),但每个短语的 md5 散列不同。我使用 Python shell:

确认了这一点

注意:短语和哈希值不是实际使用的值)

>>> import hashlib
>>> 
>>> str1 = "some phrase"
>>> str2 = "some phrase"
>>> str1 == str2
True
>>> 
>>> md5 = hashlib.md5()
>>> 
>>> md5.update(str1.encode('utf-8'))
>>> hash_1 = md5.hexdigest()
>>> 
>>> md5.update(str2.encode('utf-8'))
>>> hash_2 = md5.hexdigest()
>>> 
>>> print(hash_1)
34281bdd108d35dec09dd6599bc144gf
>>> print(hash_2)
0670d0df2506c7gf0d5ee27190g2d919

这怎么可能?

根据文档,update 使用字符串更新当前哈希值,而不创建新哈希值。您需要为此实例化一个新的 md5 对象。

https://docs.python.org/2/library/hashlib.html#hashlib.hash.update

import hashlib

str1 = "some phrase"
str2 = "some phrase"
print(str1 == str2)

md51 = hashlib.md5()

md51.update(str1.encode('utf-8'))
hash_1 = md51.hexdigest()

md52 = hashlib.md5()
md52.update(str2.encode('utf-8'))
hash_2 = md52.hexdigest()



print(hash_1 == hash_2) # True

根据文档(再次),更新相当于对两个字符串进行哈希处理,这里是一个小片段来展示它

import hashlib

str1 = "some phrase"
str2 = "some phrase"
print(str1 == str2)

md51 = hashlib.md5()

md51.update((str1 + str2).encode('utf-8'))
hash_1 = md51.hexdigest()

md52 = hashlib.md5()
md52.update(str1.encode('utf-8'))
md52.update(str2.encode('utf-8'))
hash_2 = md52.hexdigest()



print(hash_1 == hash_2)

要使其在 python2 中工作,只需删除 .encode('utf-8')