Подскажите, как оформить кусок кода с помощью рекурсии
hashes = ["1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cbad",
"3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b",
"74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f"]
letters = list("abcdefghijklmnopqrstuvwxyz")
result = {}
for l1 in letters:
for l2 in letters:
for l3 in letters:
for l4 in letters:
for l5 in letters:
word = bytes(l1+l2+l3+l4+l5, encoding='utf-8')
if hashlib.sha256(word).hexdigest() in hashes:
result[hashlib.sha256(word).hexdigest()] = word
print(result)
Выше сам код.
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
itertools.product перебирает все комбинации. Заодно преобразование в байты вынесено из цикла, чтобы его как-то разгрузить.
import hashlib
import itertools
hashes = ["1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cbad",
"3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b",
"74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f"]
letters = tuple(bytes(c, encoding='utf-8') for c in "abcdefghijklmnopqrstuvwxyz")
result = {}
for p in itertools.product(letters, repeat=5):
word = b''.join(p)
digest = hashlib.sha256(word).hexdigest()
if digest in hashes:
result[digest] = word
print(result)
$ time python product.py {'3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b': b'apple', '74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f': b'mmmmm', '1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cbad': b'zyzzx'} real 0m12.201s user 0m12.196s sys 0m0.004s