Flask-Bcrypt Не могу сравнить хешированный пароль и открытый текстPython

Программы на Python
Ответить
Anonymous
 Flask-Bcrypt Не могу сравнить хешированный пароль и открытый текст

Сообщение Anonymous »

Я создаю простое приложение, в котором вам нужно войти и зарегистрироваться. Я использую Flask и SQLAlchemy. При регистрации на этом сайте приложение добавляет информацию о пользователях в базу данных. Сюда входит хеширование пароля с использованием:

Код: Выделить всё

hashed_password = bcrypt.generate_password_hash(password).decode('utf-8')
При входе в систему он находит пользовательский хэш и сравнивает его с обычным текстом, используя:

Код: Выделить всё

if user and bcrypt.check_password_hash(user.password, password):
login_user(user)
Но при попытке войти в систему мое приложение продолжает отказывать во входе, поскольку пароль неправильный, но это определенно так.
Моя регистрация Код:

Код: Выделить всё

@app.route('/register', methods=['GET', 'POST'])
def register():

if request.method == 'POST':
first_name = request.form.get("first_name")
last_name = request.form.get("last_name")
email = request.form.get("email")
password = request.form.get("password")
hashed_password = bcrypt.generate_password_hash(password).decode('utf-8')
user = User(first_name, last_name, email, hashed_password)
db.session.add(user)
db.session.commit()
return redirect(url_for('login'))
return render_template('register.html')

Мой код входа:

Код: Выделить всё

@app.route('/login', methods = ['GET', 'POST'])
def login():
if request.method == 'POST':
email=request.form.get("email")
password = request.form.get("password")
user = User.query.filter_by(email=email).first()
if user and bcrypt.check_password_hash(user.password, password):
login_user(user)
return redirect(url_for('dashboard'))
return render_template('login.html', error="Invalid email or password.")
return render_template('login.html')
Я создал еще один скрипт Python для сравнения пароля с хешем, который был жестко запрограммирован в скрипте.

Код: Выделить всё

from flask_bcrypt import Bcrypt
bcrypt = Bcrypt()

# Simulate password hashing
password = "test"
hashed = bcrypt.generate_password_hash(password).decode('utf-8')
print(f"Hashed password: {hashed}")

# Validate manually
if bcrypt.check_password_hash(hashed, password):
print("Password validation successful!")
else:
print("Password validation failed!")

Кажется, это сработало, тогда я попробовал хэш, хранившийся в базе данных, с паролем, который я использовал для регистрации, используя тот же сценарий, но он вернул «Проверка пароля не удалась!»
Я уже много лет пытаюсь решить эту проблему, но не могу найти решение, может кто-нибудь мне помочь

Подробнее здесь: https://stackoverflow.com/questions/792 ... -plaintext
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»