Проверка пользователя по логину и паролю в 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
  1. Вы должны хешировать пароли, которые вы храните в словаре.
  2. Метод check_password должен быть методом класса, а не статическим методом.
  3. Исправьте доступ к словарю 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 возвращает результат сравнения напрямую, без лишних условных операторов.

→ Ссылка