我正在尝试构建一个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)
答案 0 :(得分:2)
您需要为要散列的每个内容创建一个新的md5对象。否则,在计算后续哈希时,您将包括先前的哈希工作。
鉴于列表“apple”,“banana”,“pear”,您的处理器正在为“apple”,“applebanana”和“applebananapear”提供哈希值。
答案 1 :(得分:1)
忽略您提供的两段代码相同的事实,如果要散列新字符串,则必须创建新的hashlib.md5
,否则更新将添加到现有散列中。 / p>
答案 2 :(得分:1)
在对其进行散列之前去掉它,而不是进行替换。
line = line.strip()