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

时间:2019-01-15 16:25:38

标签: python python-3.x md5 hashlib

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

在两种情况下,该算法都会产生相同的短语(下面的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

这怎么可能?

1 个答案:

答案 0 :(得分:4)

根据文档,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

(再次)根据文档,update等同于对两个字符串进行哈希处理,下面是一个显示代码的小片段

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