在 Wiki 的 MD5 頁面 提供了一些碰撞的例子,拿來玩玩。
首先,給的範例是 Hex 字串,得先轉回 Binary:
1 2 |
echo "4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2" | xxd -r -p > c1.bin echo "4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2" | xxd -r -p > c2.bin |
仔細看,有幾個字元是不同的。用 md5sum 檢查一下輸出:
1 2 3 |
$ md5sum *.bin 008ee33a9d58b51cfeb425b0959121c9 c1.bin 008ee33a9d58b51cfeb425b0959121c9 c2.bin |
接著隨便弄個資料:
1 |
$ echo data > data.bin |
然後看看把資料擺前面跟擺後面的差別:
1 2 3 4 |
$ cat data.bin c1.bin | md5sum a4bc0767f8157ba29132d662872319ca - $ cat data.bin c2.bin | md5sum 36a77525e1695035cddd314ac1857a9d - $ cat c1.bin data.bin | md5sum 97f17e75f7d682e8030fa23353dd2f9b - $ cat c2.bin data.bin | md5sum 97f17e75f7d682e8030fa23353dd2f9b - |
把 data.bin 放在後面會產生相同的數值,但放在前面就不一樣了。
順便試試看把這兩個碰撞的內容加在一起會如何:
1 2 3 4 5 |
$ cat c2.bin c1.bin | md5sum 713d13cc10f5b95dbda41da7105f5a4a - $ cat c1.bin c2.bin | md5sum fdf205518ee79f68f1913cc9962cba69 - |
hmm…竟然不相等 xD