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