我有一个相对简单的文本处理算法,可以从文本文件中导入一些单词并生成一个短语。如果启用了设置标志(简单常量),则该算法具有第二条路径。第二条路径基本上是一个额外的列表理解,可以过滤掉一些单词。
在两种情况下,该算法都会产生相同的短语(下面的str1
和str2
),但是每个短语的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
这怎么可能?
答案 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')