我正在尝试让python从文件中读取一些文本行,然后将它们转换为md5哈希值,以便与用户输入的内容进行比较。
我正在使用f = open(file, 'r')
来打开和阅读文件,一切正常,但是当它散列单词时,它不是该单词的正确哈希。
所以我需要知道如何删除空格或最后导致它不正确散列的\n
。
如果这是有道理的。我真的不知道如何说出来。
答案 0 :(得分:3)
我刚刚重写了你的pastebin代码,因为它不好。你为什么递归写它? (行sys.setrecursionlimit(10000000)
应该是你做错事的线索!)
import md5
hashed = raw_input("Hash:")
with open(raw_input("Wordlist Path: ")) as f:
for line in f:
if md5.new(line.strip()).hexdigest() == hashed:
print(line.strip())
break
else:
print("The hash was not found. Please try a new wordlist.")
raw_input("Press ENTER to close.")
这显然会很慢,因为它每次都会在单词列表中隐藏每个单词。如果要在wordlist中查找多个单词,则应计算(一次)哈希到单词的映射(反向查找表)并使用它。如果您的单词列表很大,则可能需要large-scale key-value storage library。
答案 1 :(得分:1)
你可以像这样打开文件:
with open('file', 'r') as f:
for line in f:
do_somthing_with(line.strip())
From the official documentation strip()
将返回字符串的副本,其中删除了前导字符和尾随字符。
编辑:由于katrielalex
的评论,我纠正了我的错误(我不知道为什么我相信我之前发布的内容)。我的道歉。
答案 2 :(得分:0)
返回带有前导和尾随字符的字符串副本 已删除.chars参数是一个指定set的字符串 要删除的字符。如果省略或None,则为chars参数 默认删除空格。 chars参数不是前缀或 后缀;相反,它的所有值组合都被剥离了:
>>> s = " Hello \n".strip() >>> print(s) ... Hello
在您的代码中,添加此内容。
words = lines[num].strip()
答案 3 :(得分:0)
def readStripped(path):
with open('file') as f:
for line in f:
yield f.strip()
dict((line, yourHash(line)) for line in readStripped(path))