制作所有可能的 6 位数字和字母组合

Making all possible 6 digit combinations of digits and alphabets

我正在尝试对我拥有的一个哈希密钥进行暴力破解,密钥是 28 位,我必须找到 6 位密码,包括 0-9 和 a-z,每个位置总共有 36 种可能性。

我正在使用带有 16gb ram 的 macbook,但是当我 运行 遵循代码时,它需要永远并最终终止使用过多内存的进程我想知道的是如何克服它,其次是它可能不是等待整个循环完成,然后迭代 abc 来获取所有组合,然后将它们传递给 SHA1 哈希函数,我可以在生成组合时将它们传递给哈希函数

abc = [''.join(i) for i in itertools.product("0123456789abcdefghijklmnopqrstuvwxyz",repeat=6)]

不要创建列表只是迭代 itertools.product object 一次获取一个值以避免一次将所有值存储在内存中:

for ele in  itertools.product("0123456789abcdefghijklmnopqrstuvwxyz",repeat=6):
    print("".join(ele))

000000
000001
000002
000003
000004
000005
000006
000007
000008
000009
00000a
00000b
00000c
00000d
00000e
00000f
00000g
00000h
00000i
00000j
00000k
00000l
00000m
00000n
00000o
00000p
00000q
00000r
00000s
00000t
00000u
00000v
00000w
00000x
00000y
...............

您可以遍历 itertools.product() returns 的对象,就像您实际上已经在处理列表理解一样,像这样:

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 而不是输入字母和数字。