回顾知识
在之前的文章中,已经介绍过MD5的基础知识,以及特殊密码不符加密结果判断相等的情况 可以回顾一下该文章:历史文章 MD5介绍
由于PHP==判断时优先转换数字的坑
这就是上一篇文章说到的问题的原因:”0e830400451993494058024219903391” == “0e848240448830537924465865611904” 会是得到相同的结果,这两个字符串都属于数字类型的字符串(可以转换为数字,原因看上一篇文章),所以PHP优先转换为数字进行比较。 导致两个值都转换为0,所以相等。
var_dump("0e830400451993494058024219903391" == "0"); // true var_dump("0e830400451993494058024219903391" == "0e8124"); // true
由于PHP弱类型string int互转的坑
如果md5结果字符串不是以数字开头的,比如
- dd456464545644ca456415
- cc9787qr8eccaqerq151q5
等等,那么根据php strig转int类型
var_dump((int) "dd456464545644ca456415"); // int(0)
如果判断与0的比较
var_dump("dd456464545644ca456415" !== 0); // false
这样子的比较也会出现问题(不要抬杠说业务中几乎没人这样子用 万一有呢?)
如何解决
仅需要记住一个原则:MD5加密结果的判断都需要===
执行即可。 ===
在PHP中的判断,不只是判断值,而且还要判断变量的类型,如果不同,则不相等。