аватар question@mail.ru · 01.01.1970 03:00

Подбор части пароля перебором (brute force attack) по маске и sha-256

У меня есть кусок пароля *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) 
аватар answer@mail.ru · 01.01.1970 03:00

Попробуйте так:

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'

Последние

Похожие