Python生成所有可能的长度为n的字符串

时间:2017-03-30 13:44:33

标签: python

我正在学习道德黑客攻击。我有密码的哈希密钥和密码算法(sha256 / sha512)。我想解析文件中的所有字符串,并检查密码的哈希值是否与文件中每个字符串的哈希值匹配。

生成的String可能包含小写字母,大字母和数字。

如何生成所有可能包含字母和数字的长度为n的字符串?

3 个答案:

答案 0 :(得分:6)

以下是使用[Python 3]: itertools.product(*iterables, repeat=1)的一段代码。
请注意,生成的字符串数量为62 ** length,因此出于测试目的,使用小值 length

import string
import itertools


def generate_strings(length=3):
    chars = string.ascii_letters + string.digits  # "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    for item in itertools.product(chars, repeat=length):
        yield "".join(item)

答案 1 :(得分:3)

您可以使用itertools.product

print([''.join(x) for x in itertools.product('abcABC123', repeat=3)])
['aaa',
 'aab',
 'aac',
 'aaA',
 'aaB',
 'aaC',
 'aa1',
 'aa2',
 'aa3',
 'aba',
...

只需将所需的剩余字符添加到输入字符串即可。您可以使用strings模块中的常量来实现此目的。

请注意,这会迅速增长。 ;)

答案 2 :(得分:2)

使用itertools.product

from itertools import product
from string import ascii_letters, digits

for i in product(ascii_letters + digits, repeat=n):
    print(''.join(i))