Найти в Дзене
Калинкин

Как создать генератор случайных паролей на Python

Оглавление
Создание генератора случайных паролей на Python
Создание генератора случайных паролей на Python

Сегодня я Вас научу создавать генератор паролей на Python — для генерации безопасных паролей — с помощью модуля Python secrets.

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

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

Давайте начнем…

Зачем писать генератор паролей на Python

Автоматизация генерации паролей
Автоматизация генерации паролей

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

1. Автоматизируйте процесс генерации пароля

В обычный день вашей жизни вы посещаете множество веб–сайтов - от сайтов электронной коммерции до платформ обучения и программирования. Большинство веб-сайтов требуют, чтобы вы входили в систему с учетными данными. Это повторяющаяся задача, которую вы можете автоматизировать с помощью скрипта Python.

2. Создайте безопасные пароли

Придумать надежные пароли, соответствующие ограничениям безопасности, может быть непросто; тривиальные пароли, которые не являются надежными, подвержены атакам безопасности.

Скрипт генерации пароля на Python
Скрипт генерации пароля на Python

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

3. Добавьте практический проект в свое портфолио

Если вы начинающий программист на Python, вам следует создавать проекты, чтобы отточить свои навыки и продемонстрировать свои знания в программировании через портфолио.

В дополнение к простому скрипту на Python, вы можете дополнительно настроить его и опубликовать в виде пакета PyPI. Вы также можете добавить графический пользовательский интерфейс, используя библиотеки, такие как Tkinter, и многое другое!

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

Модуль Random в Python: достаточно ли он безопасен?

Случайный модуль Python также предоставляет функции, которые позволяют выполнять выборку из алфавита и создавать кажущиеся случайными последовательности. Модуль random генерирует псевдослучайные последовательности. Давайте разберем, что означает псевдослучайность.

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

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

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

Итак, когда можно использовать random модуль?

Для всех приложений, которые не являются конфиденциальными, вы можете использовать модуль random. Например, в классе из 40 учеников есть три набора контрольных работ: A, B и C. Вы хотели бы назначить определенный набор каждому учащемуся случайным образом.

Пример использования модуля Random
Пример использования модуля Random

В этом случае вы можете использовать random.choice() внутри выражения для понимания списка, как показано ниже:

import random

papers = ['A','B','C']

q_list = [random.choice(papers) for i in range(40)]
print(q_list)
  • # Пример вывода
    ['A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'B', 'A', 'C', 'C', 'B',
    'C', 'A', 'B', 'A', 'A', 'C', 'C', 'A', 'A', 'A', 'C', 'A', 'C',
    'A', 'C', 'B', 'B', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B']
Ключевой вывод: Для статистического моделирования вы можете использовать random модуль; для конфиденциальных приложений используйте secrets модуль.

Модуль Python Secrets: ваш ключ к защищенным паролям

Предложение по улучшению Python, PEP 506, рекомендует разработчикам использовать secrets модуль всякий раз, когда последовательность должна быть криптографически защищенной, например, пароли и токены безопасности.

Модуль Python Secrets
Модуль Python Secrets

secrets Модуль имеет несколько встроенных функций, которые позволяют выполнять следующее:

  • Генерируйте последовательности случайных чисел, которые безопасны для криптографических приложений.
  • Используйте такие функции, как choice(), randbits() и randbelow(), для генерации безопасных случайных чисел.
  • Генерируйте токены для сброса пароля, временные URL-адреса и многое другое.

Как написать генератор паролей на Python [в 4 шага]

Предварительные требования: Для написания кода вместе с этим руководством у вас должен быть установлен Python 3.6 или более поздняя версия. Я использую на данный момент времени версию 3.11.3.

Шаг 1: Импортируйте необходимые модули

В качестве первого шага давайте импортируем secrets модуль. Этот модуль встроен в стандартную библиотеку Python, поэтому вы можете импортировать его следующим образом:

import secrets

Давайте также импортируем встроенный в Python string модуль:

import string

Шаг 2: Определите алфавит

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

Импортируем: import secrets and import string
Импортируем: import secrets and import string

string Модуль предоставляет строковые константы, которые мы можем использовать для определения алфавита. Мы будем использовать следующие строковые константы:

  • ascii_letters Представляет собой конкатенацию строчных и прописных букв.
  • digits Константа - это строка, содержащая числа от 0 до 9: '0123456789'.
  • punctuation Константа - это строка всех специальных символов.
letters = string.ascii_letters
digits = string.digits
special_chars = string.punctuation

Наконец, давайте объединим приведенные выше строковые константы, чтобы получить алфавит.

alphabet = letters + digits + special_chars

Шаг 3: Исправьте длину пароля; Сгенерируйте пароль

Давайте сохраним длину пароля в переменной, pwd_length. В этом примере строка пароля имеет длину 12.

pwd_length = 12

Теперь запустите следующую ячейку кода для генерации пароля:

pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))

print(pwd)
  • # Пример вывода
    }2:Lz,1!Gvo@

Приведенный выше код выполняет следующее:

  • Строка пароля pwd изначально является пустой строкой.
  • Мы знаем, что secrets.choice(alphabet) возвращает один символ, выбранный случайным образом из alphabet.
  • Мы используем join() метод для добавления этого символа в pwd строку. Поскольку мы не хотим, чтобы между символами были пробелы, мы указываем разделитель равным ''.
  • Чтобы повторить описанные выше шаги для генерации пароля, мы используем цикл, который выполняется столько итераций, сколько длина пароля.

Шаг 4: Настройте свои пароли на основе ограничений

Вы можете настроить генерацию пароля, проверив, соответствует ли он определенным ограничениям.

Например, давайте проверим, удовлетворяет ли сгенерированная строка пароля длиной 12 следующим ограничениям:

  • Строка pwd должна содержать хотя бы один специальный символ.
  • Он должен содержать как минимум две цифры.

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

while True:
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))

if (any(char in special_chars for char in pwd) and
sum(char in digits for char in pwd)>=2):
break
print(pwd)
  • # Пример вывода:
    lX]{`y47pM4t

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

Вот полный код для генератора паролей на Python:

# necessary imports
import secrets
import string

# define the alphabet
letters = string.ascii_letters
digits = string.digits
special_chars = string.punctuation

alphabet = letters + digits + special_chars

# fix password length
pwd_length = 12

# generate a password string
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))

print(pwd)

# generate password meeting constraints
while True:
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))

if (any(char in special_chars for char in pwd) and
sum(char in digits for char in pwd)>=2):
break
print(pwd)

Заключение

Поздравляем с окончанием этого урока! Теперь вы узнали, как создать генератор паролей на Python.

  • Для генерации криптографически защищенных паролей следует использовать модуль secrets, а не модуль random.
  • Надежный пароль должен быть достаточно длинным и случайным, поскольку его нельзя легко предсказать или сгенерировать. Это должна быть комбинация прописных и строчных букв, цифр и специальных символов.
  • Python поставляется со встроенным модулем string, который предоставляет все буквы, цифры и специальные символы в константах ascii_letters, цифрах и пунктуации соответственно. Используйте синтаксис: string.constant для доступа к этим строковым константам.
  • Вы можете использовать приведенные выше константы, чтобы определить алфавит (набор всех символов) для генерации пароля.
  • После того, как вы определили алфавит, вы можете использовать secrets.choice() для выборки случайного символа из него. Чтобы повторить это для длины пароля, вы можете использовать цикл for.