【发布时间】:2020-12-06 09:57:43
【问题描述】:
我只是在 python 中编写了一个非常简单的 MD5 破解程序。它的作用是加载 2 个单词表。 1 个来自pass.txt 的明文单词列表和来自hash.txt 的其他列表,包含所有 MD5 哈希值。它采用明文密码并逐行生成 MD5 哈希值,并与 hash.txt 中的所有 MD5 进行比较。饼干工作正常,到目前为止它按预期工作,但我的问题是它是否可以改进。假设它可以更快,或者如果我在其中加载一个包含数百万个密码的巨大列表,这会是资源问题吗?等等。甚至是比较字符串的机制。
代码:
def clear_pass():
with open("pass.txt", "r", encoding="latin-1") as file:
for x in file:
x = x.strip()
#print(x)
str2hash = (x)
result = hashlib.md5(str2hash.encode())
final_result = (result.hexdigest())
#print(final_result)
with open("hash.txt", "r") as hash_file:
for z in hash_file:
z = z.strip()
if z == final_result:
print("[+] " + final_result+ " :", x)
clear_pass()
【问题讨论】:
-
目前您的程序一次只能破解一个密码,使用一个 CPU 内核。您可以尝试使用多处理(同时使用多个内核)来加快速度。将 concurrent.futures 与 ProcessPoolExecutor 一起使用可能是一个不错的起点。
-
此外,您正在对 hash.txt 中的所有散列进行线性搜索,以查找每个密码。这需要 O(n) 时间。首先将所有哈希加载到字典中会更快 - 这将节省您读取文件的开销,并且将是一个常数时间 O(1) 查找。如果你有太多的哈希值要加载到内存中,那么你可以使用数据库来代替;索引您的数据库将为您提供 O(log n) 时间。
-
谢谢,我也会研究一下,这看起来很有趣
标签: python python-3.x md5