Разное шифрование одного и того же пароля

Программировал приложение по аренде авто. При регистрации в базу данных помещается зашифрованный пароль, но вот при попытке его расшифровать получаю другие данные и следственно - ошибку

login.py

class LoginUser(UserData):
form_data: dict = {}

@rx.event
def handle_submit(self, form_data: dict):
    """Handle form submission"""
    try:
        # Get form data
        mail = form_data["mail"]
        username = form_data["username"]
        input_password = form_data["password"].encode()
        
        key = "OC2tpXHRlrlkI749I9rtfKEvXeDZyrzS1PJ8mo4W0tM="
        cipher_suite = Fernet(key)
        
        # Поиск пользователя
        with rx.session() as session:
            user = session.exec(
                select(RegisterUser).filter(
                    (RegisterUser.username == username) | 
                    (RegisterUser.mail == mail)
                )
            ).first()

        if user:
            try:
                # Расшифровка и проверка
                decrypted_password = cipher_suite.decrypt(user.password)
                
                if input_password == decrypted_password:
                    # Успешный вход
                    self.set_user_data(
                        username=user.username,
                        mail=user.mail
                    )
                    return rx.redirect("/main")
                else:
                    return rx.toast.error("Invalid password")
                    
            except Exception as e:
                print(f"Decryption error: {str(e)}")
                return rx.toast.error("Error verifying password")
        else:
            return rx.toast.error("User not found")
            
    except Exception as e:
        print(f"Login error: {str(e)}")
        return rx.toast.error("Login error occurred")

Получаеться странный результат на один и тот же пароль, они абсолютно разные. Как правильно пароль расшифровать?

Использую фрейворк Reflex.

Весь код можно найти тут


Ответы (1 шт):

Автор решения: MeG1tsune

Вам следует хешировать пароль с применением соли, это основа безопастности данных, а когда нужно, просто сравнивать вводимый пароль пользователя с уже сущесвующем в базе. Вот статься которая вам может с этим разораться с использованием бибилотеки bcrypt

→ Ссылка