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

2024-03-29 14:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个MD5'cracker',并使用两个不同的脚本来实现它,第一个脚本从单词列表(巨大的单词)中获取单词列表列表.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)

Tags: 文件txt脚本列表linepasswordhash单词
3条回答

您需要为每个要散列的对象创建一个新的md5对象。否则,在计算后续散列时,将包含前面的散列工作。你知道吗

给定“apple”、“banana”、“pear”列表,处理器将给出“apple”、“applebanana”和“applebanaapear”的哈希值。你知道吗

在散列之前去掉单词,而不是替换。你知道吗

line = line.strip()

忽略给定的两段代码是相同的事实,如果要对新字符串进行哈希运算,则必须创建一个新的hashlib.md5,否则更新将被添加到现有的哈希运算中。你知道吗

相关问题 更多 >