首页 > 解决方案 > 在已下载的 Haveibeenpwned 版本中找不到哈希,即使它在其中(python)

问题描述

我正在尝试构建 Haveibeenpwned 密码数据库的本地版本。所以我从网站上下载了文件(NTLM 哈希,按哈希排序),解压缩并编写了一个简单的 python 程序作为概念证明:

input_file = open("Path/to/my/file","r")#HIBP Textfile (20GB)

test = "32ED87BDB5FDC5E9CBA88547376818D4" #123456
test2 = "8846F7EAEE8FB117AD06BDD830B7586C" #password
  
for lines in input_file: 
    line = input_file.readline()
    line = line.split(":")
    hash_value = line[0]
    if(hash_value == test):
        print("Pwned!")
        print(line)
    elif(hash_value == test2):
        print("Pwned")
        print(line)
    else:
        pass

这适用于“密码”哈希,但不适用于“123456”。脚本的输出:

 Pwned
['8846F7EAEE8FB117AD06BDD830B7586C', '3861493\n']
>>>     

我用 EmEditor 打开文件并搜索 123456 哈希,它就在里面。但我不确定为什么脚本找不到它。我想这与大约 20GB 的文件大小有关,但我不确定如何减轻这种情况。

我知道这绝不是有效的,它的唯一目的是检查一切是否正常。

编辑:纠正了一个小错误:我没有下载 HIBP 的“按流行度排序”版本,而是“按哈希排序”版本

标签: python-3.x

解决方案


您的代码每隔一行就跳过一次,因为for lines in input_file:转到下一行以及line = input_file.readline()

试试这种方式:

for line in input_file: 
    line = line.split(":")
    ...

推荐阅读