Главная » Кодинг » Перебор пароля на Python

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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.

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

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

      Мужик, так?

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

      Ну если уж совсем придираться, то в конструкции if-else лучше не использовать в условии отрицание, то есть так:
      if password == correctPassword:
      run = False
      else:
      wrongPasswords.add(password)

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

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

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

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

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

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