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

PHP字符串看似相等却判定不等,登录脚本密码验证失败求助

问题排查与修复方案

嘿,我一眼就瞅出你代码里的问题了——括号的位置完全错了!

你现在写的代码是:

if(md5(md5($row['salt']).md5($pwd) == $row['password']))

这里的问题在于,运算优先级导致md5($row['salt']).md5($pwd) == $row['password']会先被执行,这是一个布尔比较,结果要么是true要么是false。然后你把这个布尔值传给了外层的md5()函数,相当于你在比较md5(true)(或者md5(false))和数据库里的密码,这肯定不可能匹配啊!

正确的写法应该是:

if(md5(md5($row['salt']) . md5($pwd)) == $row['password'])

把括号移到==前面,让md5()作用在拼接后的完整字符串上:先把盐的md5值和用户输入密码的md5值拼接,再对整个拼接结果做md5,最后和数据库存储的$row['password']对比。

额外的安全提示(可选)

顺带提一句,现在MD5已经属于不安全的哈希算法了,推荐使用PHP原生的password_hash()和password_verify()函数来处理密码,它们会自动生成安全的盐值,并且支持更安全的哈希算法(比如bcrypt),能大幅提升密码存储的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:59