You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中REST接口哈希密码验证不匹配问题求助

解决PBKDF2-SHA256密码验证失败的问题

你遇到的问题核心在于登录时的密码验证逻辑错误,我们一步步来拆解和解决:

问题根源

你在登录时错误地对用户输入的密码重新生成了哈希值,然后用这个新哈希去和数据库里存储的哈希对比——但pbkdf2_sha256.encrypt()每次调用都会生成随机的salt,所以哪怕是同一个密码,两次生成的哈希字符串也完全不一样,这就是验证失败的原因。

正确的验证逻辑

passlib的verify()方法设计就是直接接收原始密码和数据库存储的哈希值,它会自动从哈希字符串里解析出之前使用的salt、rounds等参数,然后用这些参数对原始密码重新计算哈希并对比,这样就能正确验证了。

修改你的登录验证代码为:

password = data['password']
# 直接用原始密码和数据库中的哈希密码做验证
is_password_valid = pbkdf2_sha256.verify(password, user.hashed_password)

if is_password_valid:
    # 执行登录成功的逻辑
    print("登录成功")
else:
    # 密码错误处理
    print("密码不正确")

补充说明

你注册时的哈希生成逻辑是没问题的:

from passlib.hash import pbkdf2_sha256
def _get_hashed_password(self, password):
    return pbkdf2_sha256.encrypt(password, rounds=200000, salt_size=16)

这个函数生成的哈希字符串已经包含了salt、迭代次数等所有验证需要的信息,所以只需要把它完整存储到数据库即可,不需要单独存储salt。

内容的提问来源于stack exchange,提问作者Melissa Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:33:19