Это даст вам все комбинации (в разговорной речи), не сохраняя их в памяти сразу:
import itertools
def get_next_combination(iterable):
for i in range(1, len(iterable)+1):
yield from map("".join, itertools.product(iterable, repeat=i))
for combination in get_next_combination("abc"):
print(combination)
# if hash_algorithm(combination) == known_hash: print("Password found!")
Вывод:
a
b
c
aa
ab
ac
ba
bb
bc
ca
cb
cc
aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc
Может обрабатывать 7 строк символов в ~ 3 секунд, не беспокойтесь.
Если вы на самом деле пытаетесь взломать пароль, я бы предложил просто использовать hashcat или хотя бы выполнить атаку по словарю с огромным списком известных паролей.
Использование нескольких потоков может на самом деле не ускорить процесс, потому что [эталонная реализация] Python будет одновременно выполнять только один Python байт-код. Хотя я полагаю, что itertools написано в C, поэтому оно, вероятно, выпускает GIL. Тем не менее, вам обычно нужно использовать multiprocessing
для улучшения программ Python, связанных с процессором.