我正在尝试构建 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的“按流行度排序”版本,而是“按哈希排序”版本
您的代码每隔一行就会跳过一次,因为
for lines in input_file:
会转到下一行以及 line = input_file.readline()
试试这个方法:
for line in input_file:
line = line.split(":")
...
您可以使用https://github.com/ptechofficial/hibp-python-downloader
这是一个基本脚本,它将下载单个文件中的所有哈希密码。必须在我的公司使用它,因为代码很简单,所以我很容易获得使用这个脚本的批准。