Перебор пароля на Python

Перебор пароля Python

Сегодня понадобилось написать простой код для перебора случайно сгенерированных четырехзначных паролей, для «взлома». Естественно, пароль, который мы будем «взламывать», мы введем сами, в этой же программе, ведь я не хочу создавать скрипт для брута, а лишь хочу продемонстрировать новичкам в программировании, как должен работать подобный скрипт.

Еще по теме: Взлом WiFi на Python

Для начала надо выбрать язык. Я решил выбрать Python, так как он приятней глазу, и на нем будет проще объяснить, как работает процесс перебора паролей.

Итак, начнем. Какие модули нам необходимы? Только один — random! Импортируем его.

import random

Далее, надо определиться с переменными. Нам нужны 6.

correctPassword = "1234" # Вводим пароль, который нужно забрутить
wrongPasswords = [] # В этот список будут добавляться уже подобранные пароли, чтобы не повторяться
password = "" # В эту переменную будет записываться сгенерированный пароль,  и, если он ложный, пойдет в wrongPassword
length = 4 # Длина пароля. Эта переменная нужна будет в будущем
chars = "1234567890"  # Символы, из которых будет генерироваться пароль.
run = True # Думаю, не стоит объяснять

Вот и все необходимые переменные.

Теперь необходимо создать цикл. В нем все и будет выполняться. Также добавим в него строчку для обнуления переменной password

while run:
    password = ""

Переходим к самому интересному — генерации и перебору паролей.

Сначала создадим цикл for, для генерации пароля. Тут нам и пригодится переменная length.

for i in range(length):
    password += random.choise(chars)

Теперь напишем код, который будет проверять, генерировала уже программа этот пароль, или нет. Ну и проверять, идентичен ли он правильному.

if password not in wrongPasswords:
    print(password)
    if password != correctPassword:
        wrongPasswords.append(password)
    else:
        run = False
        break
print(password + " is correct")

Вот и все! Все работает!

Надеюсь, кому-то данная статья помогла, кому-то просто была интересна.

Весь код полностью:

import random

correctPassword = "1234"
wrongPasswords = []
password = ""
length = 4
chars = "12e4567890"
run = True

while run:
    password = ""
    
    for i in range(length):
        password += random.choise(chars)

    if password not in wrongPasswords:
        if password != correctPassword:
            print(password)
            wrongPasswords.append(password)
        else:
            run = False
            break

print(password + " is correct")

Еще по теме: Простой кейлоггер на Python

ВКонтакте
OK
Telegram
WhatsApp
Viber

10 комментариев

  1. Аватар
    Remil

    Куди це вводить

  2. Аватар
    lolsecbot

    Опечатка в строке

    password += random.choiCe(chars)

  3. Аватар
    Даниель Стародубцев

    Код конечно отвратительный. Генерить рандомные пароли — самый медленный метод перебора, который только возможно придумать (много времени уйдёт на определение того, выбирали ли мы его раньше). Конкретные недостатки:

    1) Инициализацию переменной length следует делать используя len(correctPassword), чтобы при вводе надо было изменять одну строку, а не две.
    2) Переменная run не выполняет никакой функции, поскольку одновременно с run=False выполняется break. Следует либо убрать оттуда break, либо удалить run и сделать while True.
    3) Переменную wrongPasswords лучше сделать не списком, а множеством, поскольку тогда будет быстрее проверка наличия в нем элемента.
    4) Инициализация переменной password до цикла не требуется.
    5) Поскольку из модуля random используется только одна функция, лучше писать не import random, а from random import choice.

    Был поражен, увидев столько косяков в столь коротком коде…

    • Аватар
      Сергей

      Мужик, так?

      from random import choice
       
      correctPassword = "1234"
      wrongPasswords = set()
      
      length = len(correctPassword)
      chars = "123456789"
      run = True
      
      
      while run:
          password = ''
          for i in range(length):
              password += choice(chars)
      
          if password not in wrongPasswords:
              if password != correctPassword:
                  wrongPasswords.add(password)
              else:
                  run = False
      
      
      print(password + " is correct")
    • Аватар
      Даниель Стародубцев

      Ну если уж совсем придираться, то в конструкции if-else лучше не использовать в условии отрицание, то есть так:

      if password == correctPassword:
          run = False
      else:
          wrongPasswords.add(password)

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

    • Аватар
      Даниель Стародубцев

      Вообще говоря, у вашего алгоритма даже средняя сложность больше, она равна количеству возможным комбинаций, тем временем как у последовательного перебора она в два раза меньше. Про максимальную сложность вообще молчу, она у вас бесконечна)). А у последовательного перебора макс. сложность равна вашей средней…

      И при этом на практике ваш алгоритм получается не в 2 а примерно в 10 раз дольше… Как то так

    • Аватар
      Ангел

      Спасибо!

  4. Аватар
    Эдуард

    Ну во первых вероятность сильно ничтожная.

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

    В третьих, как быстро вы переполните оперативу хранением такого длинного массива в памяти.

    В четвертых, с увлечением массива будет замедляться скорость работы кода.

    В пятых, выносите все if по возможности за пределы цикла, для ускорения брута.

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

    Так же для простого числового пароля, проще сделать так же отдельную функцию которая с каждой итерацией будет увеличиваться на +1.
    Скорость взлома пароля 11111 таким методом занимает 8 секунд, что будет гораздо быстрее чем это рандомить.

  5. Аватар
    Артём

    А что делать если не знаешь пароль?

  6. Аватар
    Smalex

    correctPassword = 9462

    for i in range(1, 10000):
    print (i)
    if i == correctPassword:
    print (f’ {i} is correct ‘)
    break

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *