Как заставить мой Python взломщик паролей работать более эффективно? - PullRequest
0 голосов
/ 22 апреля 2020

Через некоторое время go я заинтересовался созданием взломщика псевдополя. Итак, вот некоторый код:

list = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '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'] # giving it a list 

passlength = int(input('Length of string: ')) # length of code or no of objects
aspass = '' # empty string acts as assumed password
passs = input('Please input password ') # he infamous password
b = [] # the list that will stores randomly generated passwords as values
attempt = 0
digits = 0   
o = True
while o:
    for k in range(0, passlength): # run this loop as many times as the length of password
        x = str(random.choice(list))#the attempted upon digit in the password
        aspass += x
        digits += 1 # counts the step the cracker is on
        #print(aspass)
        if(len(aspass) > passlength or aspass in b):
            digits = 0
            attempt += 1
            break
        else:
            continue
        #b.append(aspass)
    if(aspass == passs):
        break
        o = False
        end()
    else:
        b.append(aspass)
        aspass = ''
        continue

Дело в том, что все работает и генерирует 2-х струнный пароль. Однако, если длина превышает 2 или 3 строки. Ну, это как-то движется со скоростью улитки. Тогда у меня возникла идея: если бы я мог сохранить случайно сгенерированный пароль в созданном мной списке «b» и убедиться, что пароли в этом списке не повторяются в процессе, тогда я думаю, что он будет работать значительно быстрее.

Поскольку я абсолютный новичок, у меня нет идей, как сделать это быстрее любым другим способом. Что можно попробовать (например, импортируемые модули), чтобы улучшить это?

1 Ответ

1 голос
/ 22 апреля 2020

Взлом пароля не легкая работа. Подумайте о пространстве поиска, через которое вам нужно пройти go по мере увеличения длины пароля. Ваш список возможных символов содержит 26 букв и 10 цифр (кстати, вы можете использовать string.digits и string.ascii_lowercase). Итак, для первого символа в вашем пароле есть 36 вариантов. Второй имеет 36 вариантов, третий имеет 36 вариантов и так далее. Поэтому для пароля длиной n у вас будет 3 ^ n вариантов. Как вы можете быстро видеть, это число очень быстро растет даже для небольших чисел.

Ваш метод взлома пароля называется Атака грубой силой , и он крайне неэффективен, особенно учитывая тот факт, что что большинство паролей хранятся не в виде простого текста, а в виде хешированной строки.

Несколько других примечаний:

  1. Ваши имена переменных не велики. Большинство из них не имеют смысла, и это делает ваш код намного сложнее для понимания.
  2. Вы выбираете случайную строку вместо того, чтобы просматривать все возможные варианты по порядку. У вас нет возможности охватить все варианты, используя этот метод. Вы можете использовать itertools.permutations для перебора всех опций.
  3. Не используйте скобки в if операторах, это не способ Python. Пожалуйста.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...