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

数据库未存储明文密码时,如何验证用户输入的密码是否正确?

服务端密码哈希校验原理

整个校验逻辑的核心建立在密码哈希函数的基础特性上:相同的输入、相同的哈希算法和参数,必然得到完全相同的输出结果,且哈希运算不可逆,无法从输出的哈希值反推原始输入内容。

具体的校验流程如下:

  • 注册阶段:用户提交原始密码时,服务端会使用指定的密码哈希算法(目前主流为Argon2、bcrypt,不推荐使用MD5、SHA-1等已被破解的弱哈希算法),搭配随机生成的唯一盐值对原始密码进行哈希运算,最终仅将运算得到的哈希值、盐值、算法参数一同存入数据库,原始密码不会做任何存储。
  • 登录校验阶段:用户提交登录用的原始密码后,服务端会从数据库中取出该用户对应的哈希算法参数、盐值,使用完全相同的流程对当前用户输入的密码做哈希运算,得到临时哈希值。
  • 结果比对:服务端将新生成的临时哈希值与数据库中存储的哈希值做逐位比对,两者完全一致则判定密码正确,允许登录;不一致则判定密码错误。

注:目前主流的密码哈希算法生成的存储串本身就已经整合了算法标识、参数、盐值、最终哈希值,比如$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy就是标准的bcrypt存储格式,服务端校验时直接解析该字符串即可获取所有需要的参数,无需单独存储盐值和算法配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:09:03