为什么文件中某个单词的md5哈希值与字符串的哈希值不匹配?

时间:2017-01-19 21:04:43

标签: python file hash md5

我正在尝试创建一个python程序,它可以读取字典中的单词,创建md5哈希并将其与给定的哈希进行比较。

当我尝试比较两个未从文件中读取的单词时,一切正常:

if hashlib.md5(b"string").hexdigest() == "b45cffe084dd3d20d928bee85e7b0f21":
    print("Equal!")

但是当我从文件中逐行读取单词时,单词的散列不同。代码如下所示:

f = open('short.txt', 'r')

stringHash = 'b45cffe084dd3d20d928bee85e7b0f21'

for line in f:

   if stringHash == hashlib.md5(line.encode('utf_8')).hexdigest():
       print("Found it! Password: %s" % line)

感谢您提供任何帮助和解释。

1 个答案:

答案 0 :(得分:4)

逐行文件迭代器产生整行,包括行终止符

在您的代码中,您包括该行的行终止符。

line.encode('utf_8').rstrip()将产生正确的结果。

如果你的字符串以空格结束(目的),

rstrip()将失败。在这种情况下,只需:

line.encode('utf_8').rstrip('\r\n')

如果在Unix上以 text 模式打开文件,可能会保留\r(回车)(在Windows上不是问题)

(而rstrip并未删除' \ r \ n'字符串,但每行\r或/和n包含在该行的末尾,它不像str.split