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

时间:2015-03-01 04:13:23

标签: python hash sha1 itertools brute-force

我正在尝试对我拥有的一个哈希键进行蛮力,键是28位,我必须找到6位数的密码,包括0-9和az,每个地方共有36种可能性。

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

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

2 个答案:

答案 0 :(得分:2)

您可以迭代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而不是输入字母和数字。

答案 1 :(得分:0)

不要创建列表只是迭代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
...............