from cryptography.fernet import Fernet
import sys
import re
MASTER_PASSWORD = "0"
MAX_ATTEMPTS = 3
def passw():
attempts = 0
while attempts < MAX_ATTEMPTS:
password = input("Введите мастер-пароль: ")
if password == MASTER_PASSWORD:
# продолжайте выполнение программы
break # выход из цикла при правильном вводе пароля
else:
attempts += 1
print("Неверный мастер-пароль. Попробуйте еще раз.")
else:
print("Превышено максимальное количество попыток. Приложение будет закрыто.")
sys.exit() # выход из приложения после трех неверных попыток
def generate_key():
"""
Функция для генерации ключа для шифрования/дешифрования
"""
return Fernet.generate_key()
def load_key():
"""
Функция для загрузки ключа из файла
"""
return open("secret.key", "rb").read()
def write_key(key):
"""
Функция для записи ключа в файл
"""
with open("secret.key", "wb") as key_file:
key_file.write(key)
def encrypt_password(password, key):
"""
Функция для шифрования пароля
"""
encoded_password = password.encode()
f = Fernet(key)
encrypted_password = f.encrypt(encoded_password)
return encrypted_password.decode()
def decrypt_password(encrypted_password, key):
"""
Функция для расшифровки пароля
"""
f = Fernet(key)
decrypted_password = f.decrypt(encrypted_password.encode())
return decrypted_password.decode()
def add_password():
"""
Функция для добавления нового пароля
"""
site = input("Введите название сайта: ")
username = input("Введите имя пользователя: ")
password = input("Введите пароль: ")
key = load_key()
encrypted_password = encrypt_password(password, key)
strength = password_strength(password)
if strength < 2:
print("Пароль слишком слабый. Рекомендуется использовать пароль длиной не менее 8 символов, содержащий цифры, буквы в разных регистрах и специальные символы.")
return
with open("passwords.txt", "a") as f:
f.write(f"{site}:{username}:{encrypted_password}\n")
print("Пароль успешно добавлен.")
def password_strength(password):
"""
Функция для оценки надежности пароля
"""
score = 0
# Проверка длины пароля
if len(password) < 8:
return 0
# Проверка наличия цифр
if re.search(r"\d", password):
score += 1
# Проверка наличия букв в разных регистрах
if re.search(r"[a-z]", password) and re.search(r"[A-Z]", password):
score += 1
# Проверка наличия специальных символов
if re.search(r"[ !\"#$%&'()*+,-./[\\\]^_`{|}~]", password):
score += 1
return score
def get_password():
"""
Функция для получения пароля
"""
site = input("Введите название сайта: ")
with open("passwords.txt", "r") as f:
for line in f.readlines():
if line.startswith(site + ":"):
parts = line.strip().split(":")
username = parts[1]
encrypted_password = parts[2]
key = load_key()
decrypted_password = decrypt_password(encrypted_password, key)
strength = password_strength(decrypted_password)
if strength < 2:
print("Этот пароль слишком слабый. Рекомендуется изменить пароль на более надежный.")
print(f"Пароль для пользователя {username}: {decrypted_password}")
return
print("Пароль не найден.")
def main():
"""
Основная функция программы
"""
passw()
print("Добро пожаловать в менеджер паролей!")
key = generate_key()
write_key(key)
while True:
print("\nВыберите действие:")
print("1. Добавить пароль")
print("2. Получить пароль")
print("3. Выйти из программы")
choice = input("> ")
if choice == "1":
add_password()
elif choice == "2":
get_password()
elif choice == "3":
print("Спасибо за использование менеджера паролей!")
break
else:
print("Неверный выбор. Попробуйте снова.")
if __name__ == "__main__":
main()