从aaaa到zzzzpython

2024-09-28 21:01:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找到一种使用python(aaaa,aaab,aaac…zzzz)从aaaa到zzzz进行暴力攻击的方法。 类似于0000到9999。 有没有一种“神奇”的方法可以使用循环和列表来实现这一点


Tags: 方法列表暴力aaaaaaacaaabzzzz
3条回答

这是一个非常“基本”的例子:

chars = 'abcdefghijklmnopqrstuvwxyz'
my_list = []

for c1 in chars:
    for c2 in chars:
        for c3 in chars:
            for c4 in chars:
                my_list.append(c1+c2+c3+c4)
                
print(my_list)

您可以使用^{}简洁地实现这一点:

import itertools
import string

for elem in itertools.product(string.ascii_lowercase, repeat=5):
    ...

以下是该方法产生的前30个值的示例:

>>> values = itertools.product(string.ascii_lowercase, repeat=5)
>>> print(list(itertools.islice(values, 30)))
[
    ('a', 'a', 'a', 'a', 'a'), 
    ('a', 'a', 'a', 'a', 'b'), 
    ('a', 'a', 'a', 'a', 'c'), 
    #  Snip   
    ('a', 'a', 'a', 'a', 'x'), 
    ('a', 'a', 'a', 'a', 'y'), 
    ('a', 'a', 'a', 'a', 'z'), 
    ('a', 'a', 'a', 'b', 'a'), 
    ('a', 'a', 'a', 'b', 'b'), 
    ('a', 'a', 'a', 'b', 'c'), 
    ('a', 'a', 'a', 'b', 'd')
]

请注意,此序列中有26**5 == 11881376个值,因此您可能不希望将它们全部存储在列表中。在我的系统中,这样的列表大约占用100个MiB

很难知道你认为什么是“神奇的”,但我看不到循环中的魔力。 这里有一个变体:

cs = 'abcdefghijklmnopqrstuvwxyz'
list(map(''.join, [(a,b,c,d) for a in cs for b in cs for c in cs for d in cs]))

相关问题 更多 >