MD5強碰撞
可以看到,使用了三個等號,這個時候PHP會先檢查兩邊的變量類型,如果不相等直接返回False。
數組
param1: aaa[]
param2: bbb[]
param1[]=111¶m2[]=222
這個時候md5讀入兩個數組的時候,因為無法解析數組內容,都會讀入一個常量字符串“array”,故兩個參數md5相同。
科學計數法
0e開頭的數字會被解析成科學計數法。
1e12 ---> 1 * 10^12
0e開頭的意思自然就都會解析成0。
我們只需要找兩個字符串,讓其md5后開頭兩個字母是0e即可,如有需要,這兩個字符串本身也可以是0e開頭。
param1=QNKCDZO¶m2=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值是相同的,即真實碰撞。研究了半天不太清楚咋來的,姑且先記着。