Проверка пользователя по логину и паролю в python. запнулся на проверке логина и пароля. Пароли для примера записаны в словаре
import hashlib
class Users:
def __init__(self, login, password, access_rights):
self.login = login
self.password = password
self.access_rights = None
def check_password (login, password):
if login not in users:
print("Такого пользователя не существует!")
add_hash = login[users]
hash_password = hashlib.sha256(password.encode()).hexdigest()
if hash_password == add_hash:
return True
else:
return False
if check_password == True:
print("Вход выполнен успешно!")
else:
print("Неверный логин или пароль")
us_er = Users
users = {"user1":"12345678", "user2":"pass123"}
login = input("Введите имя пользователя")
password = input("Введите пароль")
print(us_er.check_password(login, password))
Ответы (1 шт):
Автор решения: Alexandr Ogorodnik
→ Ссылка
- Вы должны хешировать пароли, которые вы храните в словаре.
- Метод check_password должен быть методом класса, а не статическим методом.
- Исправьте доступ к словарю users.
Вот исправленный код python:
import hashlib
# Словарь пользователей с хешированными паролями
users = {
"user1": hashlib.sha256("12345678".encode()).hexdigest(),
"user2": hashlib.sha256("pass123".encode()).hexdigest()
}
class Users:
def __init__(self, login, password):
self.login = login
self.password = password
@staticmethod
def check_password(login, password):
if login not in users:
print("Такого пользователя не существует!")
return False
hash_password = hashlib.sha256(password.encode()).hexdigest()
if hash_password == users[login]:
return True
else:
return False
# Получаем ввод от пользователя
login = input("Введите имя пользователя: ")
password = input("Введите пароль: ")
# Проверяем логин и пароль
if Users.check_password(login, password):
print("Вход выполнен успешно!")
else:
print("Неверный логин или пароль")
Обновленный вариант:
import hashlib
class Users:
def __init__(self, users):
self.users = users
def check_password(self, login, password):
if login not in self.users:
print("Такого пользователя не существует!")
return False
hash_password = hashlib.sha256(password.encode()).hexdigest()
return hash_password == self.users[login]
# Словарь пользователей с хешированными паролями
users_dict = {
"user1": hashlib.sha256("12345678".encode()).hexdigest(),
"user2": hashlib.sha256("pass123".encode()).hexdigest()
}
# Создаем экземпляр класса Users
users = Users(users_dict)
# Получаем ввод от пользователя
login = input("Введите имя пользователя: ")
password = input("Введите пароль: ")
# Проверяем логин и пароль
if users.check_password(login, password):
print("Вход выполнен успешно!")
else:
print("Неверный логин или пароль")
Теперь словарь users передается в класс Users через конструктор, и метод check_password возвращает результат сравнения напрямую, без лишних условных операторов.