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/

posted @ 2015-10-09 11:14  sky钦  阅读(252)  评论(0)    收藏  举报