PHP MD5强碰撞

MD5强碰撞

搬得这个师傅的 https://www.cnblogs.com/kuaile1314/p/11968108.html

可以看到,使用了三个等号,这个时候PHP会先检查两边的变量类型,如果不相等直接返回False。

数组

param1: aaa[]
param2: bbb[] 
param1[]=111&param2[]=222

这个时候md5读入两个数组的时候,因为无法解析数组内容,都会读入一个常量字符串“array”,故两个参数md5相同。

科学计数法

0e开头的数字会被解析成科学计数法。
1e12 ---> 1 * 10^12
0e开头的意思自然就都会解析成0。
我们只需要找两个字符串,让其md5后开头两个字母是0e即可,如有需要,这两个字符串本身也可以是0e开头。

param1=QNKCDZO&param2=aabg7XSs

真实碰撞

就是开头题目上的,将post进去的参数转为string类型,没有办法再用数组和科学计数法的方法,所以只能使用真实的碰撞。

a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

因为存在不可见字符,没办法复制到url,所以采用url编码。这两个字符串只在末尾的地方有一点点差别,最后算出来的md5值是相同的,即真实碰撞。研究了半天不太清楚咋来的,姑且先记着。

posted @ 2022-01-02 17:19  AikNr  阅读(1065)  评论(0编辑  收藏  举报