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
相关产品推荐
相关产品推荐

