Python 2个脚本返回2个不同的哈希值,我认为是同一个字符串
我正在尝试构建一个MD5“cracker”,并使用两个不同的脚本来实现它,第一个脚本从一个单词列表(巨大的单词列表.txt)中获取一个单词列表,然后将它们散列并写入另一个文件(WordsHash.txt)。第二种方法是获取一个用户定义的单词,对其进行散列,并将其与WordHash.txt中的散列进行比较,但我得到的是“相同”字符串的不同散列 第一个脚本:Python 2个脚本返回2个不同的哈希值,我认为是同一个字符串,python,python-2.7,Python,Python 2.7,我正在尝试构建一个MD5“cracker”,并使用两个不同的脚本来实现它,第一个脚本从一个单词列表(巨大的单词列表.txt)中获取一个单词列表,然后将它们散列并写入另一个文件(WordsHash.txt)。第二种方法是获取一个用户定义的单词,对其进行散列,并将其与WordHash.txt中的散列进行比较,但我得到的是“相同”字符串的不同散列 第一个脚本: import hashlib hashes = open("WordsHash.txt", 'w') m = hashlib.md5()
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)
您需要为每个要散列的内容创建一个新的md5对象。否则,在计算后续散列时将包括前面的散列工作
给定“苹果”、“香蕉”、“梨”列表,您的处理器将给出“苹果”、“applebanana”和“AppleBanaapear”的哈希值。您需要为每个要哈希的对象创建一个新的md5对象。否则,在计算后续散列时将包括前面的散列工作
给定“苹果”、“香蕉”、“梨”列表,处理器将为“苹果”、“applebanana”和“AppleBanaapear”提供哈希值。忽略您提供的两段代码相同的事实,如果要对新字符串进行哈希,则必须创建一个新的
hashlib.md5
,否则,更新将被添加到现有哈希中。忽略您提供的两段代码相同的事实,如果要哈希新字符串,必须创建一个新的hashlib.md5
,否则,更新将被添加到现有哈希中。在对单词进行哈希处理之前将其去除,而不是进行替换
line = line.strip()
在对单词进行哈希运算之前,先将其去掉,而不是进行替换
line = line.strip()
strip()的作用不仅仅是替换\n请求,但告诉询问者无条件地剥离并不一定正确。根据我的经验,在散列单词时,通常希望剥离输入以避免常见错误。大多数人不打算在单词前后加空格。这可以防止“word”和“word”进行不同的哈希运算。strip()的作用不仅仅是替换\n sure,但告诉询问者无条件地进行strip并不一定正确。根据我的经验,在对单词进行哈希运算时,通常希望剥离输入以避免常见错误。大多数人不打算在单词前后加空格。这可以防止“word”和“word”进行不同的散列。