为什么文件中单词的 md5 散列与字符串的散列不匹配?
Why md5 hash of a word from a file doesn't match the hash of a string?
我正在尝试创建一个 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)
感谢您的帮助和解释。
line-by-line 文件迭代器生成整行 包括行终止符 .
在您的代码中,您包含了该行的行终止符。
line.encode('utf_8').rstrip()
将产生正确的结果。
如果您的字符串(故意)以空格结尾,rstrip()
将失败。在那种情况下,只需执行:
line.encode('utf_8').rstrip('\r\n')
如果文件在 Unix 上以 text 模式打开,可能 \r
(回车符 return)可能会保留(在 [=37 上不是问题=])
( 而 rstrip
不会删除 '\r\n' 字符串,但每个 \r
or/and n
包含在行尾,这不像 str.split
)
我正在尝试创建一个 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)
感谢您的帮助和解释。
line-by-line 文件迭代器生成整行 包括行终止符 .
在您的代码中,您包含了该行的行终止符。
line.encode('utf_8').rstrip()
将产生正确的结果。
rstrip()
将失败。在那种情况下,只需执行:
line.encode('utf_8').rstrip('\r\n')
如果文件在 Unix 上以 text 模式打开,可能 \r
(回车符 return)可能会保留(在 [=37 上不是问题=])
( 而 rstrip
不会删除 '\r\n' 字符串,但每个 \r
or/and n
包含在行尾,这不像 str.split
)