/
ylts
/
PasswordGenerator
Обзор
Документация
Войти
/
ylts
/
PasswordGenerator
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MenuConsole/Menu.py
239 строк
13 KB
Sergey
Add in programm save passworsd in file
28 июн 2026, 22:20
28 июн 2026, 22:20
cbfcaf8
Код
Авторство
О чём код?
import logging from PasswordGenerator import PasswordGenerator as pg from TestPassword import TestPassword import datetime class Menu: def __init__(self, title="Главное меню"): self.estimator = TestPassword.PasswordCrackerEstimator(speed=1_000_000) self.logger = logging.getLogger() self.logger.info("Приложение запущено") self.title = title self.pass_gen = pg.PasswordGenerator() self.pass_length = self.pass_gen.get_settings().get_password_length() self.pass_count = self.pass_gen.get_settings().get_passwords_count() self.pass_special_symbols = self.pass_gen.get_settings().get_special_symbols() self.pass_languages = self.pass_gen.get_settings().get_languages() self.pass_language = self.pass_gen.get_settings().get_language() self.pass_big = self.pass_gen.get_settings().get_big() self.pass_small = self.pass_gen.get_settings().get_small() self.pass_numbers = self.pass_gen.get_settings().get_numbers() self.pass_special = self.pass_gen.get_settings().get_special() def show(self): while True: if self.title == "Главное меню": print("=" * 70, "\n") print(" 1. Сгенерировать пароль c настройками\n 2. Сгенерировать пароль по умолчанию\n 0. Выход\n") print("=" * 70) input_data = input("Введите номер пункта: ") if input_data == "1": input_data = input(f"Введите длину пароля (по умолчанию ({self.pass_length}): ") if input_data.isdigit() and int(input_data) > 0: self.pass_length = int(input_data) else: print("Ошибка ввода! используется значение по умолчанию\n") print("Длина пароля: ", self.pass_length, "\n") input_data = input(f"Введите количество паролей (по умолчанию ({self.pass_count}): ") if input_data.isdigit() and int(input_data) > 0: self.pass_count = int(input_data) print("количество паролей: ", self.pass_count, "\n") else: print("Ошибка ввода! используется значение по умолчанию\n") text = "Нет" if self.pass_small and self.pass_big: text = "Да" input_data = input(f"Использовать в пароле буквы? Да/Нет (по умолчанию ({text}): ") if input_data.lower() == "да" or input_data.lower() == "": if len(self.pass_languages) > 1: print(f"Выберите язык пароля по умолчанию ({self.pass_language}): ") for i, lang in enumerate(self.pass_languages): print(f"{i + 1}. {list(lang.items())[0][1].get('name')}") input_data = input("Введите номер пункта: ") if input_data.isdigit() and 0 < int(input_data) <= len(self.pass_languages): self.pass_language = list(self.pass_languages[int(input_data) - 1].items())[0][0] else: print("Ошибка ввода! используется значение по умолчанию\n") print("Язык пароля: ", self.pass_language, "\n") text = "Нет" if self.pass_big: text = "Да" input_data = input(f"Использовать заглавные буквы? (по умолчанию ({text}): ") if input_data.lower() == "да" or input_data.lower() == "": self.pass_big = True elif input_data.lower() == "нет": self.pass_big = False else: print("Ошибка ввода! используется значение по умолчанию\n") text = "Нет" if self.pass_small: text = "Да" input_data = input(f"Использовать строчные буквы? (по умолчанию ({text}): ") if input_data.lower() == "да" or input_data.lower() == "": self.pass_small = True elif input_data.lower() == "нет": self.pass_small = False else: print("Ошибка ввода! используется значение по умолчанию\n") elif input_data.lower() == "нет": self.pass_small = False self.pass_big = False else: print("Ошибка ввода! используется значение по умолчанию\n") self.pass_small = False self.pass_big = False text = "Нет" if self.pass_numbers: text = "Да" input_data = input(f"Использовать цифры? (по умолчанию ({text}): ") if input_data.lower() == "да" or input_data.lower() == "": self.pass_numbers = True elif input_data.lower() == "нет": self.pass_numbers = False else: print("Ошибка ввода! используется значение по умолчанию\n") text = "Нет" if self.pass_special: text = "Да" input_data = input(f"Использовать спецсимволы? (по умолчанию ({text}): ") if input_data.lower() == "да" or input_data.lower() == "": self.pass_special = True input_data = input(f"Введите спецсимволы через пробел (по умолчанию ({' '.join(self.pass_special_symbols)}): ") if input_data: self.pass_special_symbols = input_data.split(" ") elif input_data.lower() == "нет": self.pass_special = False else: print("Ошибка ввода! используется значение по умолчанию\n") print("Пароль состоит из: ") if self.pass_small and self.pass_big: for lang in self.pass_languages: if self.pass_language in lang: print("язык: ", lang.get(self.pass_language).get("name")) break if self.pass_small: print(" - строчных букв") if self.pass_big: print(" - прописных букв") if self.pass_numbers: print(" - цифр") if self.pass_special: print(" - спецсимволов: ", ' '.join(self.pass_special_symbols)) input_data = input("Сгенерировать пароль? Да/Нет: (по умолчанию Да): ") if input_data.lower() == "да" or input_data.lower() == "": passwords = self.pass_gen.generate_password( self.pass_length, self.pass_count, self.pass_small, self.pass_big, self.pass_numbers, self.pass_special, self.pass_language, self.pass_special_symbols ) str_pass_info = f"Сгенерировано {self.pass_count} пароля(лей) длиной {self.pass_length}. " if self.pass_small and self.pass_big: for lang in self.pass_languages: if self.pass_language in lang: str_pass_info +="Язык: " + lang.get(self.pass_language).get("name") break str_pass_info += "Пароль состоит из: " if self.pass_small: str_pass_info +="строчных букв, " if self.pass_big: str_pass_info +="прописных букв, " if self.pass_numbers: str_pass_info +="цифр, " if self.pass_special: str_pass_info +="спецсимволов: ", ' '.join(self.pass_special_symbols) logging.info(str_pass_info) for password in passwords: result = self.estimator.estimate(password) print(f"Пароль: {password}") print(f" Время взлома: {result.get('crack_time_human')}") print(f" Стойкость: {result.get('strength')}") print("-" * 40) print(" Сохранить пароли в файл?(Да / Нет) По умолчнию нет") if input().lower()=="да": try: file_name = "password"+str(datetime.datetime.now())+".txt" with open(file_name ,"w",encoding="utf-8") as file: file.writelines(p + "\n" for p in passwords) logging.info(f"[+] Пароли сохранены в файле с именем "+file_name) except Exception : logging.error("[!] Ошибка записи файла") elif input_data == "2": passwords = self.pass_gen.generate_password( self.pass_length, self.pass_count, self.pass_small, self.pass_big, self.pass_numbers, self.pass_special, self.pass_language, self.pass_special_symbols ) str_pass_info = f"Сгенерировано по умолчанию {self.pass_count} пароля(лей) длиной {self.pass_length}. " if self.pass_small and self.pass_big: for lang in self.pass_languages: if self.pass_language in lang: str_pass_info +="Язык: " + lang.get(self.pass_language).get("name") break str_pass_info += "Пароль состоит из: " if self.pass_small: str_pass_info +="строчных букв, " if self.pass_big: str_pass_info +="прописных букв, " if self.pass_numbers: str_pass_info +="цифр, " if self.pass_special: str_pass_info += ("спецсимволов: " + ' '.join(self.pass_special_symbols)) logging.info(str_pass_info) for password in passwords: result = self.estimator.estimate(password) print(f"Пароль: {password}") print(f" Время взлома: {result.get('crack_time_human')}") print(f" Стойкость: {result.get('strength')}") print("-" * 40) print(" Сохранить пароли в файл?(Да / Нет) По умолчнию нет") if input().lower()=="да": try: file_name = "password"+str(datetime.datetime.now())+".txt" with open(file_name ,"w",encoding="utf-8") as file: file.writelines(p + "\n" for p in passwords) logging.info(f"[+] Пароли сохранены в файле с именем "+file_name) except Exception : logging.error("[!] Ошибка записи файла") elif input_data == "0": self.logger.info("Приложение завершено") break