Генератор всех возможных 8 символов строки. Грубая сила 8 символов пароля. питон

Мне нужно написать генератор, который выдает все возможные 8 символов строки. Из массива символов вот так:

leters = ['1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m']

Скелет выглядит так:

def generator():
    """
    here algorithm
    """
    yield string

Предположим, чтобы вернуть список, как это ['00000001','00000002','00000003', ......'mmmmmmmm']

3 ответа

Решение

itertools.combinations() а также itertools.combinations_with_replacement() вернуть генератор

>>> letters = ['a', 'b', 'c']
>>> from itertools import combinations

я использую print() в примерах, чтобы проиллюстрировать вывод. Заменить его yield, чтобы получить генератор.

>>> for c in combinations(letters, 2): 
        print(c)
... 
('a', 'b')
('a', 'c')
('b', 'c')

>>> for c in combinations(letters, 2): 
        print(''.join(c))
... 
ab
ac
bc
>>> 

>>> for c in itertools.combinations_with_replacement(letters, 2): 
        print(''.join(c))
... 
aa
ab
ac
bb
bc
cc

Если вы используете грубую силу для всех 8-буквенных паролей, содержащих английские буквы и цифры, вам нужно перебрать ~ 2,8 триллиона строк

РЕДАКТИРОВАТЬ Если вы как-то знаете, что нет повторяющихся элементов, используйте permutations

>>> for c in itertools.permutations(letters, 2): 
        print(''.join(c))
... 
ab
ac
ba
bc
ca
cb

это дает вам и б, и ба

Для самой общей последовательности перебора используйте itertools.product() как в решении Cosmologicon

itertools.product(leters, repeat=8)

РЕДАКТИРОВАТЬ: чтобы он дал вам строки, а не кортежи:

def generator(leters):
    a = itertools.product(leters,repeat=3)
    while a:
        yield "".join(a.next())
import itertools
itertools.combinations_with_replacement(leters, 8)

Кстати, буквы имеют две буквы.

Мне было интересно, как это сделать, и это то, что я придумал, я попробовал это пару раз, но когда я написал это так, это пошло намного быстрее, чем другие... пожалуйста, lmk, если я не вижу

import string

from itertools import permutations

[print(*p,sep='')for p in permutations(list(string.ascii_letters+string.punctuation+string.digits),8)]
Другие вопросы по тегам