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

2022-08-30 15:13:21
var_dump(md5('240610708') == md5('QNKCDZO'));

输出:

bool(true)

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


答案 1

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

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

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

当与 进行比较时,两个字符串都转换为 ,如果要将它们作为字符串进行比较,请记住使用(严格比较)代替。0=====

请参见:PHP 表示两个不同的字符串是相同的


答案 2

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

哈希值分别计算为 和 。使用 时,由于(科学记数法),每个都转换为数字表示形式,因此它们都变为 . 是真的。0e4620974319065090195629887368540e830400451993494058024219903391==e00 == 0

另一方面,这个:

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

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


推荐