可以實現在"文件A"中存儲其md5值嗎?


能不能實現?理論上肯定可以。

如何實現?目前還沒有非常好的演算法。

原圖地址:https://shells.aachen.ccc.de/~spq/md5.gif

這張圖很神奇,之前一度被刷屏,因為它可以顯示自己的 MD5 值。如果感興趣,可以看看這篇文章:一張可以顯示自己 MD5 值的 gif 圖。


當然能啊,16 位元組序列的總數是有限的,把它們全都連起來之後會得到一個很長但有限的字元串,它的 MD5 當然包含在其內。

對於更簡單的 hash,甚至可以直接算出類似的串來:

The CRC32 of this string is 4A1C449B

對於任意的 pattern,存在這種不動點的概率大約在 61%。


&可以&可能可以,你找到md5函數的不動點就行了,我記得有個搞科研的懸賞100塊呢。


MD5值的總數是有限的,所以如果枚舉所有的MD5值,然後把它們拼起來作為一個文件的內容,那麼這個文件的MD5肯定出現在它的內容里了啊……但至於出現在哪兒就不好說了……【反正你又沒要求保存在文件開頭,捂臉逃


請看這篇文章:

http://drops.wooyun.org/papers/12396

求大神詳細講講,如何在運算能力以內實現碰撞成功→_→


放在文件名裡面


ntfs的流可以有限實現

如果非常必要 可以考慮用透明加解密的思路-雙fcb方式實現 不過複雜度太高 有點殺雞用牛刀


可以跟CIH學一手,放在文件內部碎片里。


NTFS支持在一個文件中存放多個流,你可以把文件主體的md5值存在一個獨立的流裡面。


MD5被王小雲破解了以後,已經有了MD5碰撞生成器,Google一下就有,可以對任意可執行文件給定目標MD5的情況下生成碰撞。所以現在文件校驗都不用MD5了……

如果是包含的話,用這個生成器可以很快生成。

如果是剛好相等的話……好像比較難,只能遍歷一遍了……但目標空間非常大……大概只有上帝能完成這個遍歷……當然不排除有人運氣很好,抽到了一個。


真是個因缺斯汀的問題~我喜歡哈哈哈,期待大神答案,我先來獻獻醜。

我認為原則上做到有困難,理論上確實可以做到,再聲明一下,我說的能做到不代表就能輕易實現!

從概率性上講,MD5值只是一串字元,舉個例子,我可以窮舉出所有可能的MD5值(雖然窮舉組合很多很多,實現也有困難,但是我們是從可能性上講,所以不關注量的大小,再怎麼多反正不是無窮大的組合就OK)然後每個都寫進一個TXT文檔,那樣。。。啊偶~(??? ? ???)寫到這發現自己偏題了,各位看官息怒哈哈,下面是糾正後的回答(*/ω\*)

來個拓展閱讀,MD5雖然很多,但是遠沒有文件多,所以存在一些不同文件對應相同MD5的情況https://www.zhihu.com/question/23189202

對上面的結論嚴格上講,是一個MD5可以對應無窮多個文件,基於MD5的一值對應多文件的特點,我們可以對MD5的演算法進行反推,沒關係,我們不需要關心反推對應的結果總的數量的多少,也不關心反推的計算量和時間花費。

說到這可能會有人質疑我的反推的辦法,因為我們都知道MD5是不支持逆向破解的,但是請注意,這裡的不支持的意思是不能逆向推出原加密的信息,並不是就不能反向運算,只是反向運算會得到無窮多個解,對破解的人來說是毫無意義的運算。就好比 數學上的求積分要在後面加個常數項C一樣,所有的常數C都能求導得到原積分式子而求都不知道原始求導的函數的C的值是多少 一個道理。

而我提出的反推MD5演算法也是和上面積分一個道理,就是通過一個特定的MD5值反推可以得到無窮個對應解。

根據MD5的加密原理,其加密的是位元組串,所以我們得到對應解就是一系列不同的位元組串,現在的問題就成了嘗試向這些位元組串賦上對應的字元(相應的編碼另行考慮),這樣可以得到無窮多可能對應的文件,而我們只需要取出其中很多個但有限的一部分對應的文件出來,嘗試找到包含這個MD5值的文件就可以了,如果這一批找不到,就再往後取出一部分出來尋找,最後總可以找到的。

出於可行性的加強考慮,最後得到的包含這個MD5值的文件可能會帶有一些其他必要的字元,上述的就是我對自己觀點不太嚴格的一個證明。

說白了我這就是個窮舉法,舉到符合條件的為止,不過不管怎麼上面方法需要計算多長時間,尋找多久,最後總是不會避開存在這麼一個包含這個MD5值的文件的。

想了想還是覺得自己的這個方法簡直蠢到不行(′?? ? ??`) 求大神支招~哎,自己嘰嘰歪歪在這說了半天,其實就是MD5碰撞,拓展閱讀http://drops.wooyun.org/papers/12396

私以為能實現碰撞的牛人應該不回來知乎玩吧哈哈哈 ?????


1、如果文件內容 「等於」 文件的 MD5 值,比較難

2、若文件內容 包含 其md5值,比如指定位置(前16位元組?),則:利用md5碰撞有機會。


回答個與問題不相關的,但也說明md5碼確實不完美,可以碰出來。

轉自cnBeta:http://www.cnbeta.com/articles/59117.htm

原來我總是很自信地以為:你有本事找到 MD5 的碰撞又如何?你難道還有本事讓兩個可執行文件的 MD5 一樣,卻又都能正常運行,並且可以做完全不同的事情么?

答:還真的可以.

http://www.win.tue.nl/hashclash/SoftIntCodeSign/HelloWorld-colliding.exe

http://www.win.tue.nl/hashclash/SoftIntCodeSign/GoodbyeWorld-colliding.exe

這兩個程序會在屏幕上列印出不同的字元,但是它們的 MD5 都是一樣的。

通讀其論文後摘要如下:

這幾位密碼學家使用的是「構造前綴碰撞法」(chosen-prefix collisions)來進行此次攻擊(是王小雲所使用的攻擊方法的改進版本)。

他們所使用的計算機是一台 Sony PS3,且僅用了不到兩天。

他們的結論:MD5 演算法不應再被用於任何軟體完整性檢查或代碼簽名的用途。

另:現在,如果僅僅是想要生成 MD5 相同而內容不同的文件的話,在任何主流配置的電腦上用幾秒鐘就可以完成了。

這幾位密碼學家編寫的「快速 MD5 碰撞生成器」:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip

源代碼:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5_source.zip


據我所知不可以。

當你把文件A的hash存入文件A的同時,文件A的內容就變了,因此它的hash也變了,你存入的那個hash就是不正確的。


暴力解決

md5(s)==md5(md5(s)+s)


hash碰撞


這個問題描述的有點費解,我先試著理解一下。題主的意思是說,因為對於任意文件其MD5值長度相同,不同文件MD5值有不同,那麼可以通過儲存只儲存MD5節省空間。

但是這裡存在問題,MD5值不能被還原成唯一的文件,換句話說存在不同的文件具有相同的MD5。這裡可以用簡單的用鴿巢原理證明,即MD5值由於其長度有限,故只有有限個(雖然很多),而文件的內容有無限種(由於長度無限制),所以必然存在不同的文件對應到相同的MD5值。

綜上,不可行。


推薦閱讀:

有什麼有趣的 Python 模塊值得推薦?
編程時候這麼多的函數方法之類的是怎麼記下來的??
非計算機專業學生編程如何入門?
數學不好能學編程嗎?
有沒有什麼方法,能在2個月內,顯著提升演算法能力?

TAG:演算法 | 數學 | 編程 | 加密 |