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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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 раз дольше… Как то так

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

      Спасибо!

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

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

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

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

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