为什么md5('240610708')等于md5('QNKCDZO')?

时间:2014-03-03 06:36:20

标签: php md5

var_dump(md5('240610708') == md5('QNKCDZO'));

输出

bool(true)

示例: http://3v4l.org/2vrMi

2 个答案:

答案 0 :(得分:36)

md5('240610708')的结果是0e462097431906509019562988736854

md5('QNKCDZO')的结果是0e830400451993494058024219903391

它们都是浮点数格式字符串数字字符串),如果在php中使用==,则将数字与字符串进行比较或者比较涉及数字字符串,然后将每个字符串转换为数字,并以数字方式进行比较。

0相比,这两个字符串都转换为==,如果您想将它们作为字符串进行比较,请记住使用===严格比较)而不是。

请参阅:PHP expresses two different strings to be the same

答案 1 :(得分:11)

您需要使用类型敏感的比较运算符===

哈希分别评估为0e4620974319065090195629887368540e830400451993494058024219903391。当您使用==时,由于e(科学记数法),每个都会转换为数字表示,因此每个都变为00 == 0是真的。

另一方面,这个:

md5('240610708') === md5('QNKCDZO')

返回false,因为字符串值不同。 ===强制进行类型敏感的比较。