有沒有兩個完全不一樣的文件,但是他們的md5值是一樣的?

如題


這裡有兩張看起來完全不同的圖片,但是 MD5 是一樣的:Nat McHugh: How I created two images with the same MD5 hash

貌似需要科學上網。本來想傳到知乎的,結果傳第二張的時候知乎直接給了我第一張,看來知乎是認 MD5 的。。。


答案是肯定存在兩個不同文件md5相同

原因在於md5將任意長度的文件映射到一個128bit的串

如果我們有2^128 + 1個不同的文件 根據抽屜原理則至少有兩個文件的md5相同

但同時md5保證給定一個文件f1,找到一個文件f2使其md5與f1的相同是相對困難的,這就保證了md5可以用被用於比如判斷文件完整性


多了去了。。。

從理論上來說同個MD5值的文件不管文件文件大小是一致還是不一致都起碼有幾十萬億個文件或者多得多,但怎麼找到比較麻煩。一個100MB的文件,排列組合是無數種,如果算沒有意義的字元也算的話,一個100KB的無意義文本就能發生碰撞。MD5隻有2的128次方,一個字元是2的8次方。100KB是10萬個字元。

MD5能表示的值是2的128次方。就一個100*100的圖片填不同顏色,產生MD5相同的概率都非常高。2的128次方數字很大?也就是幾十個像素而已。

數據有意義的話就比較難找碰撞,數據沒有意義的話碰撞大把。無限集合對應2的128次方的集合碰撞幾率大把。雖然2的128次方人民幣看起來是個很大的數字,只是絕大部分的碰撞都沒有什麼意義就是。


存在無數個字元串的MD5值相同。原因是:

所有字元串集合A的Size是無窮的,所有MD5的集合B的Size是2^128(因為MD5是128位的),從一個無限集合A映射到有限集合B,那必然存在A的一個無窮子集A1,使得A1的所有元素(字元串)在B中映射到同一個元素,即存在無窮多個字元串,它們的MD5值相同。


有,而且現在做起來很快很簡單。

兩個不一樣的輸入,算出一樣的md5,這叫做hash碰撞(hash collision)。

要快速地用起來,找個fastcoll程序就可以做到。

要了解原理,可以看王小雲的這個論文。

http://www.infosec.sdu.edu.cn/paper/md5-attack.pdf


使用鴿巢原理可很容易證明,有!


可執行文件的 MD5 碰撞


當然有了,文件空間遠大於128位的哈希值空間,必然存在兩個文件哈希值一樣,只是如果可以在多項式時間或者低冪時間內找到這樣的一個碰撞,md5也就要被新的哈希函數替代了,因為md5的安全性就建立在md5的碰撞穩固性上,也就是碰撞問題難解。


有,叫做碰撞。但是這種情況發生概率實在太渺茫


有可能啊。完全有可能,只是概率超級低


推薦閱讀:

Git是否考慮到SHA1碰撞的問題了?

TAG:密碼 | MD5 | 哈希函數 |