我正在尝试对我拥有的一个哈希 key 进行暴力破解, key 是 28 位,我必须找到 6 位数字的密码,包括 0-9 和 a-z,每个位置共有 36 种可能性。
我使用的是带有 16gb 内存的 macbook,但是当我运行以下代码时,它会花费很长时间并最终杀死使用过多内存的进程,我想知道的是如何克服它,其次是否有可能而不是等待整个循环完成,然后迭代 abc 来获取所有组合,然后将它们传递给 SHA1 哈希函数,我可以在生成组合时将它们传递给哈希函数
abc = [''.join(i) for i in itertools.product("0123456789abcdefghijklmnopqrstuvwxyz",repeat=6)]
最佳答案
您可以迭代 itertools.product()
返回的对象,就像您实际上已经在使用列表理解一样,如下所示:
import itertools, string
for i in itertools.product(string.ascii_lowercase+string.digits,repeat=6):
if check_hash("".join(i)):
print i
break
这只会将当前的存储在内存中。
有 (26+10)^6 = 2176782336 种可能性,所以可能仍然需要一段时间。每个占用 6 个字节,您的原始解决方案使用了 13060694016 个字节,即略多于 12 GB。
我也在使用 Python 2 的 string constants而不是输入字母和数字。
关于python - 制作所有可能的数字和字母的 6 位数组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790015/