Python字典攻击只解决最后一个哈希

时间:2017-05-18 18:48:31

标签: python dictionary hash

我正在尝试使用Python构建字典攻击脚本(用于教育目的),它只解决了我文件中的最后一个SHA-256哈希。

逻辑如下:

  • 阅读包含文字的文件
  • 将单词的散列值与单词一起存储为字典中的键值对
  • 扫描包含SHA-256哈希值的文本行(每行1个哈希值)
  • 迭代字典中的项目,如果值与哈希值匹配则打印密钥

它适用于我文件中的最后一项,但是说我找不到其他人的匹配。

我的哈希文件如下:

9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08
5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8

包含“test”和“password”的散列值。

我的word文件包含超过70,000个单词,我确保这两个单词都在文件中,当我调试时,如果我调用表达式,它们都会在字典中有值。

这是我在我的文件中迭代哈希的地方:

with open(hashFile) as f:
    for c in f:
        findMatch(str(c).lower(),wordMap)

我编写的函数用于将散列值与字典中的每个值进行比较:

def findMatch(hv,m):
    #k is the key, m is the dictionary
    for k in m:
        if(m[k].lower() == hv):
            print("Match was found: " + k )
            return
    print("Match was not found, searched through " + str(len(wordMap)) + " words")

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

findMatch(str(c).lower(),wordMap)中,无需拨打str()(因为c已经是字符串),但 需要剥离尾随换行符:findMatch(c.strip().lower(),wordMap)。否则,它包含在哈希值计算中。显然,文件的最后一行没有尾随换行符,这就是它被正确识别的原因。