2个脚本返回2个不同的哈希值,我认为是相同的字符串

时间:2012-02-27 21:56:40

标签: python python-2.7

我正在尝试构建一个MD5'破解者',并使用两个不同的脚本来完成它,第一个从单词列表中获取单词列表(巨大的单词list.txt),然后散列它们并将它们写入另一个文件(WordsHash.txt)。然后第二个接受用户定义的单词,哈希并将其与WordHash.txt中的哈希值进行比较,但我得到的是“相同”字符串的不同哈希值。

第一个脚本:

import hashlib

hashes = open("WordsHash.txt", 'w')

m = hashlib.md5()

with open("huge word list.txt") as words:
    words = words.readlines()

    print "processing..."

    for line in words:

        line = line.replace("\n", "")

        m.update(line)

        word_hash = m.hexdigest()

        line = "%s %s\n" % (line, word_hash)

        hashes.write(line)

print "done."

hashes.close()

和第二个脚本:

import hashlib


f = open('WordsHash.txt')

p = '\'due'

password = hashlib.md5()

password.update(p)

password = password.hexdigest()

print "%r %r" %(password, p)



for line in f:

    lines = line.split(" ")

    lines[1] = lines[1].replace("\n", "")

    word_hash = lines[1]

    if word_hash == password:

        print "found it, %s" % line

        exit(0)

3 个答案:

答案 0 :(得分:2)

您需要为要散列的每个内容创建一个新的md5对象。否则,在计算后续哈希时,您将包括先前的哈希工作。

鉴于列表“apple”,“banana”,“pear”,您的处理器正在为“apple”,“applebanana”和“applebananapear”提供哈希值。

答案 1 :(得分:1)

忽略您提供的两段代码相同的事实,如果要散列新字符串,则必须创建新的hashlib.md5,否则更新将添加到现有散列中。 / p>

答案 2 :(得分:1)

在对其进行散列之前去掉它,而不是进行替换。

line = line.strip()