如何为字母和字母数字密码创建一个Bruteforce密码破解程序?

Ale*_*x H 0 python passwords cracking brute-force

我需要为学校制作小程序,以蛮力破解不同类型的密码; 我正在寻找创建一个强力python代码,它将贯穿字母和字母数字密码的每个可能组合,并给我密码和破解所需的时间.

我用纯数字密码做了同样的事情,得到了这个:

import datetime as dt

Password4 = 123456

def crack_password():
    start = dt.datetime.now()
    for n in range(1000000):
        password_guess = '{0:04d}'.format(n)
             if password_guess == str(Password4):
                end = dt.datetime.now()
                print("Password found: {} in {}".format(password_guess, end - start))
               break
    guesses = crack_password()
Run Code Online (Sandbox Code Playgroud)

然后我尝试对字母/字母数字密码做一些类似的事情,但是无论我尝试什么都没有用:

    import random

    letters = [str(i) for i in range('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p')]
    s = [''.join([a,b,c,d,e,f,g,h]) for a in letters for b in letters for c   in letters for d in letters for e in letters for f in letters for g in letters  for h in letters]
    random.shuffle(s)
    real_password = 'aaaaaaaa'
    i = 0

    for code in s:
        if code == real_password:
            print()
            print('The password is: ', code)
             break
        else:
            i += 1
            print(i, ' failures', end='\r')
Run Code Online (Sandbox Code Playgroud)

至关重要的是,该程序包括失败次数或找到密码所花费的时间,这就是我不能简单地创建密码生成器的原因.

请注意:我对编码很新,非常感谢你的帮助:)

Cor*_*mer 8

这是一个naiive蛮力方法,它将猜测数字(string.digits)和小写字母(string.ascii_lowercase).您可以使用itertools.productrepeat一套来猜测当前密码长度.您可以从1字符密码(或任何下限)开始,然后将其限制为最大长度.然后就return在你找到比赛时.

import itertools
import string

def guess_password(real):
    chars = string.ascii_lowercase + string.digits
    attempts = 0
    for password_length in range(1, 9):
        for guess in itertools.product(chars, repeat=password_length):
            attempts += 1
            guess = ''.join(guess)
            if guess == real:
                return 'password is {}. found in {} guesses.'.format(guess, attempts)
            print(guess, attempts)

print(guess_password('abc'))
Run Code Online (Sandbox Code Playgroud)

产量

a 1
b 2
c 3
d 4
...
aba 1369
abb 1370
password is abc. found in 1371 guesses.
Run Code Online (Sandbox Code Playgroud)