Найти тему
Pythonic

Разбор кода генератора паролей на Python с использованием библиотеки tkinter

Полный код в конце статьи
Полный код в конце статьи

Для начала, мы можем определить требования к надежному паролю. Обычно он должен содержать комбинацию букв (в верхнем и нижнем регистре), цифр и специальных символов. Длина пароля также играет важную роль - чем длиннее пароль, тем сложнее его подобрать методом перебора.

-2

Импортируем необходимые модули: `tkinter` для создания графического интерфейса, `choice` и `shuffle` из модуля `random` для генерации случайных значений, и `string` для работы со строками.

-3

Создаем корневое окно нашего приложения с размерами 300x80 пикселей и устанавливаем заголовок "Генератор паролей".

-4

Создаем три переменные типа `BooleanVar()`, которые будут использоваться для хранения состояния флажков.

-5

Создаем три флажка (`Checkbutton`) с помощью `tk.Checkbutton`. Каждый флажок связан с соответствующей переменной `BooleanVar()`. Флажки отображаются с текстом "0-9", "A-z" и "symbols" и размещаются на координатах (0, 0), (0, 20) и (0, 40) соответственно.

-6

Создаем поле ввода (`Entry`) для символов и устанавливаем его ширину равной 10. Поле ввода размещается на координатах (0, 60).

-7

Создаем спинбокс (`Spinbox`) для выбора длины пароля. Значения спинбокса находятся в диапазоне от 1 до 100. Флаг `wrap` установлен в `True`, чтобы значение спинбокса оборачивалось при достижении минимального или максимального значения. Состояние спинбокса установлено в "readonly", чтобы пользователь не мог вводить значения вручную. Спинбокс размещается на координатах (70, 0).

-8

Создаем поле вывода (`Entry`), в котором будет отображаться сгенерированный пароль. Поле вывода размещается на координатах (70, 20).

-9

Пишем функцию `generate_password()`, которая будет вызываться при нажатии на кнопку "Generate". В этой функции мы определяем длину пароля, инициализируем пустой список `password` и пустую строку `string_choice`.

-10

Проверяем состояние флажков и добавляем соответствующие символы в `string_choice` и `password`. Если флажок "symbols" выбран и поле символов не пустое, мы добавляем символы из поля в `string_choice` и выбираем случайный символ для пароля. Аналогично, если флажок "0-9" выбран, мы добавляем цифры, а если флажок "A-z" выбран, мы добавляем буквы верхнего или нижнего регистра.

-11

Проверяем если `string_choice` не пустая строка, то мы генерируем оставшуюся часть пароля, перемешиваем символы и выводим результат в поле вывода. Если `string_choice` пустая строка, то выводим "None".

-12

Создаем кнопку "Generate" с помощью `tk.Button`. При нажатии на эту кнопку будет вызываться функция `generate_password()`. Кнопка размещается на координатах (70, 40).

-13

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

-14

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

Полный код:

import tkinter as tk
from random import choice, shuffle
import string
root = tk.Tk()
root.geometry("300x80")
root.title("Генератор паролей")
integer_in_password = tk.BooleanVar()
string_in_password = tk.BooleanVar()
symbols_in_password = tk.BooleanVar()
checkbutton_integer = tk.Checkbutton(text="0-9", variable=integer_in_password)
checkbutton_integer.place(x=0, y=0)
checkbutton_string = tk.Checkbutton(text="A-z", variable=string_in_password)
checkbutton_string.place(x=0, y=20)
checkbutton_symbols = tk.Checkbutton(text="symbols", variable=symbols_in_password)
checkbutton_symbols.place(x=0, y=40)
symbols = tk.Entry(width=10)
symbols.place(x=0, y=60)
password_length = tk.Spinbox(from_=1.0, to=100, wrap=True, state="readonly")
password_length.place(x=70, y=0)
output = tk.Entry()
output.place(x=70, y=20)
def generate_password():
password_length["from_"] = integer_in_password.get() + string_in_password.get() + symbols_in_password.get()
length = int(password_length.get())
password = []
string_choice = ''
if symbols_in_password.get() and len(symbols.get()) > 0:
string_choice += symbols.get()
password.append(choice(symbols.get()))
length -= 1
if integer_in_password.get():
string_choice += string.digits
password.append(choice(string.digits))
length -= 1
if string_in_password.get():
string_choice += string.ascii_letters
password.append(choice(string.ascii_letters))
length -= 1
if len(string_choice) > 0:
for _ in range(length):
password.append(choice(string_choice))
shuffle(password)
output.delete(0, tk.END)
output.insert(0, ''.join(password))
else:
output.delete(0, tk.END)
output.insert(0, 'None')
generation_button = tk.Button(text="Generate", command=generate_password)
generation_button.place(x=70, y=40)
root.mainloop()