简单的Python问题 - MD5哈希

3
我正在尝试编写一个小的Python脚本来对一些单词进行哈希。我正在使用hashcat来验证我的输出,但出现了问题,这应该是非常简单的过程...但我无法确定我哪里做错了。只有最后一个哈希的输出被正确地哈希了。当在我的样本文件中为5行使用“123456”作为测试时,我得到以下输出:

f447b20a7fcbf53a5d5be013ea0b15af

f447b20a7fcbf53a5d5be013ea0b15af

f447b20a7fcbf53a5d5be013ea0b15af

f447b20a7fcbf53a5d5be013ea0b15af

e10adc3949ba59abbe56e057f20f883e

有人能指出我的错误吗?将不胜感激。
import hashlib


my_file = open("sample.txt" , "r")

for line in my_file:
    try:
        hash_object = hashlib.md5(line)
        print(hash_object.hexdigest())

    except:
        print "Error"

my_file.close()

一个是123456的MD5,另一个是123456\n的。 - Klaus D.
2个回答

2

前四行的哈希值不同,因为在MD5哈希计算中包含了回车符。而最后一行没有这个回车符,因此返回一个不同的值。只需使用strip()删除回车符即可使所有五行得到相同的哈希值:

import hashlib


my_file = open("sample.txt" , "r")

for line in my_file:
    try:
        hash_object = hashlib.md5(line.strip())
        print(hash_object.hexdigest())

    except:
        print "Error"

my_file.close()

这将输出以下内容:
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e

1
你的代码问题在于,你将整行进行哈希,即“123456\n”,其中包含末尾的'\n'。
最后一行没有'\n',这就是为什么它的哈希与“123456”的哈希匹配的原因。
在哈希之前尝试修剪行,然后你就可以运行了。
hash_object = hashlib.md5(line)更改为hash_object = hashlib.md5(line.strip())

所以只需要简单地去掉这一行吗?我真傻...从没想过。谢谢。 - user3791463
这并不傻,但警惕的眼睛应该能够捕捉到这些错误。编码愉快。 :) - Harshil Lodhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接