Подбор части пароля перебором (brute force attack) по маске и sha-256
📁 python, ии
У меня есть кусок пароля *elp** (вместо звездочек должны быть символы, которые надо подобрать), но я знаю от него sha256 хеш:
fda23a72c73c92a1ad61cd18c58961b90c2c127028c8b87fd1a65c5e1f55d17eМне надо подобрать из всей этой информации к нему пароль (если что, пароль helpMe)
я написала кусок программы и не знаю как сделать дальше
import hashlibmas = [""A"",""B"",""C"",""D"",""E"",""F"",""G"",""H"",""I"",""J"",""K"",""L"",""M"",""N"",""O"",""P"",""Q"",""R"",""S"",""T"",""U"",""V"",""W"",""X"",""Y"",""Z"",""a"",""b"",""c"",""d"",""e"",""f"",""g"",""h"",""i"",""j"",""k"",""l"",""m"",""n"",""o"",""p"",""q"",""r"",""s"",""t"",""u"",""v"",""w"",""x"",""y"",""z"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""0""]a = b'Hello'sha = hashlib.sha256(a).hexdigest()print(sha) Попробуйте так:
import string import hashlibfrom itertools import productdef brute_force(mask, hsh, alphabet=string.ascii_letters+string.digits, verbose=False): # экранируем фигурные скобки # и заменяем '*' на '{}' для последующей подстановки в 'str.format()' pwd_pat = mask.replace('{', '{{').replace('}','}}').replace('*', '{}') # число звездочек - будем использовать в качестве `product(.., repeat)` N = mask.count('*') i = 0 for chars in product(alphabet, repeat=N): if verbose: i += 1 if i % 10000 == 0: print('Iterations: {}'.format(i)) if hsh == hashlib.sha256(pwd_pat.format(*chars).encode()).hexdigest(): retu pwd_pat.format(*chars) retu NoneТест:
hsh = 'fda23a72c73c92a1ad61cd18c58961b90c2c127028c8b87fd1a65c5e1f55d17e'In [245]: brute_force('*elp**', hsh, verbose=True)Iterations: 10000Iterations: 20000Out[245]: 'helpMe' Войдите чтобы оставить ответ