PHP magic hashes
1. php比较两个字符串是否相等时,用===
2. php比较字符串与数字时,会将字符串先转换为数值形式,如'12abc'转换为12,'abc'转换为0
3. php的科学计数法表示是利用字母e,例如:1.23e2为123
例1:
var_dump('0a830400451993494058024219903391'=='0'); //输出boolean false,因为是字符串比较,不将0a830400451993494058024219903391转换为0
var_dump('0a830400451993494058024219903391'==0); //输出boolean true,比较前先将0a830400451993494058024219903391转换为数值0
対于如下一段PHP代码:
1 <?php 2 $test=$_GET['test']; 3 $test2=md5($test); 4 5 if($test2=='0') { 6 echo "success"; 7 } 8 else 9 echo "falied";
要想使md5($test)='0',得利用一些特殊的哈希值。
md5('240610708'),结果为0e462097431906509019562988736854,是string类型
md5('QNKCDZO'),结果为0e830400451993494058024219903391,是string类型
本地测试:
var_dump('0e462097431906509019562988736854'=='0'); //输出boolean true
var_dump('0e830400451993494058024219903391'=='0'); //输出boolean true
这看似与上面的例1相悖,因为字符串比较时不会进行数值转换,想当然应输出boolean false
其实,由于php科学计数法用e表示,且这里特殊的是,e后面全部为数字,所以0e462097431906509019562988736854会被当成浮点数来处理。
参考:
https://blog.whitehatsec.com/magic-hashes/

浙公网安备 33010602011771号