尝试使用 bcrypt 身份验证登录 Flask 应用程序时出现“无效盐”错误

问题描述 投票:0回答:1

我在尝试登录我正在开发的 Flask 应用程序时遇到问题,该应用程序使用 bcrypt 身份验证将加密密码存储在 PostgreSQL 数据库中。

尝试使用有效凭据登录时,我收到以下错误: { “错误”:“无效的盐”}

但是,检查数据库后,用户数据似乎是正确的:

id=3

用户名=therock

[电子邮件受保护]

密码=\x2432622431322447427839364969554c4a394a61334266536646777365616938546f323066722e78716468485276367165677537687a43596 5427975

以下是相关代码片段:

# Login code snippet
@user_bp.route('/login', methods=['POST'])
def login():
  data = request.get_json()
  username = data.get('username')
  password = data.get('password')

try:
    conn = connect_db()
    cursor = conn.cursor()

    cursor.execute("SELECT * FROM users WHERE username=%s", (username,))
    user = cursor.fetchone()

    if user:
        hashed_password = user[3]
        if bcrypt.checkpw(password.encode(), hashed_password.encode()): 
           
        else:
            return jsonify({'error': 'Invalid password!'}), 401
    else:
        return jsonify({'error': 'Invalid username!'}), 401
except Exception as e:
    return jsonify({'error': str(e)}), 500
finally:
    if 'conn' in locals():
        conn.close()

有人可以帮助我理解为什么我在尝试登录时收到此“无效盐”错误,即使数据库中的凭据似乎是正确的?

图像错误

python flask bcrypt
1个回答
0
投票

24...75
是十六进制编码的哈希值。如果这个值是十六进制解码的,你会得到:

$2b$12$GBx96IiULJ9Ja3BfSfFwseai8To20fr.xqdhHRv6qegu7hzCYeByu

如果使用

checkpw()
对照此哈希检查密码,则验证成功(即返回
True
):

import bcrypt 

hash = bytes.fromhex('2432622431322447427839364969554c4a394a61334266536646777365616938546f323066722e78716468485276367165677537687a435965427975')
print(hash.decode('utf-8')) # $2b$12$GBx96IiULJ9Ja3BfSfFwseai8To20fr.xqdhHRv6qegu7hzCYeByu
verified = bcrypt.checkpw('senha7894'.encode('utf-8'), hash)
print(verified) # True
© www.soinside.com 2019 - 2024. All rights reserved.