Для начала, мы можем определить требования к надежному паролю. Обычно он должен содержать комбинацию букв (в верхнем и нижнем регистре), цифр и специальных символов. Длина пароля также играет важную роль - чем длиннее пароль, тем сложнее его подобрать методом перебора.
Импортируем необходимые модули: `tkinter` для создания графического интерфейса, `choice` и `shuffle` из модуля `random` для генерации случайных значений, и `string` для работы со строками.
Создаем корневое окно нашего приложения с размерами 300x80 пикселей и устанавливаем заголовок "Генератор паролей".
Создаем три переменные типа `BooleanVar()`, которые будут использоваться для хранения состояния флажков.
Создаем три флажка (`Checkbutton`) с помощью `tk.Checkbutton`. Каждый флажок связан с соответствующей переменной `BooleanVar()`. Флажки отображаются с текстом "0-9", "A-z" и "symbols" и размещаются на координатах (0, 0), (0, 20) и (0, 40) соответственно.
Создаем поле ввода (`Entry`) для символов и устанавливаем его ширину равной 10. Поле ввода размещается на координатах (0, 60).
Создаем спинбокс (`Spinbox`) для выбора длины пароля. Значения спинбокса находятся в диапазоне от 1 до 100. Флаг `wrap` установлен в `True`, чтобы значение спинбокса оборачивалось при достижении минимального или максимального значения. Состояние спинбокса установлено в "readonly", чтобы пользователь не мог вводить значения вручную. Спинбокс размещается на координатах (70, 0).
Создаем поле вывода (`Entry`), в котором будет отображаться сгенерированный пароль. Поле вывода размещается на координатах (70, 20).
Пишем функцию `generate_password()`, которая будет вызываться при нажатии на кнопку "Generate". В этой функции мы определяем длину пароля, инициализируем пустой список `password` и пустую строку `string_choice`.
Проверяем состояние флажков и добавляем соответствующие символы в `string_choice` и `password`. Если флажок "symbols" выбран и поле символов не пустое, мы добавляем символы из поля в `string_choice` и выбираем случайный символ для пароля. Аналогично, если флажок "0-9" выбран, мы добавляем цифры, а если флажок "A-z" выбран, мы добавляем буквы верхнего или нижнего регистра.
Проверяем если `string_choice` не пустая строка, то мы генерируем оставшуюся часть пароля, перемешиваем символы и выводим результат в поле вывода. Если `string_choice` пустая строка, то выводим "None".
Создаем кнопку "Generate" с помощью `tk.Button`. При нажатии на эту кнопку будет вызываться функция `generate_password()`. Кнопка размещается на координатах (70, 40).
Запускаем основной цикл обработки событий, чтобы окно приложения оставалось открытым до его закрытия.
Конечно, этот пример генерирует пароль, который соответствует основным требованиям безопасности. Однако, для увеличения надежности пароля, можно добавить дополнительные параметры. В заключение, разработка генератора паролей на 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()