md5 編碼可以反編碼出來么?就是已經知道生成的 md5 編碼,反推源文件

登錄認證(MD5密碼)

MD5還廣泛用於操作系統的登陸認證上,如Unix、各類BSD系統登錄密碼、數字簽名等諸多方。

如在UNIX系統中用戶的密碼是以MD5(或其它類似的演算法)經Hash運算後存儲在文件系統中。

當用戶登錄的時候,系統把用戶輸入的密碼進行MD5 Hash運算,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。

通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。

如果可以,上面的額敘述不就是很不安全么?

如果不可以,為什麼呢?可逆性感覺應該沒問題


不能。

要是能就不是摘要演算法,而是無損壓縮演算法了。


不能。下面兩個二進位串

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

有完全相同的 MD5:79054025255fb1a26e4bc422aef54eb4


這是一個好問題。但是,題主的思路是不正確的。嚴格來說,題主的問題和描述所討論的並不是一回事。很多答案沒有指出這一點。

題主可以先想一想,當我們在討論可逆性的時候,我們在討論什麼?

當我們拿到一個源文件的md5值,是無法反向推出源文件的內容的,這一類「不可逆」的性質是由md5演算法的單向性保證的。其它答案大多也提到了這一點。從md5演算法的名稱——message digest——即可看出,這個演算法是一個摘要演算法,它提取的是原始文件的摘要而丟棄了很多細節信息(否則無法壓縮到128位之中)。

但是,是不是在所有情形下,我們都必須對付md5的單向性呢?答案是否定的。典型的例子就是題主的描述中所提到的,在密碼驗證這種應用場景下。既然摘要演算法對原始信息進行了丟棄,理論上一定會有兩個或以上的原文對應同一個計算結果,即H(A)=H(B)=r。因此在知道計算結果的情況下,如果能找到多個原文中的任意一個,不需要知道用戶輸入的密碼原本是什麼即可成功登錄。這種情況的可逆性被稱之為「碰撞」——嚴格來說,屬於「弱碰撞」。

例如,我們自定義一個摘要演算法,將用戶輸入的數字加和後取尾數,例如用戶輸入為123456,則摘要值為(1+2+3+4+5+6) mod 10=1。這當然是一個有損的摘要演算法,通過摘要值1並不能反推出用戶輸入的原文,但是一旦知道了演算法的過程,我們很容易就能構造出另一個密碼——如555501——並成功登錄。

幸運的是,md5演算法具有較強的「抗弱碰撞」的特性,因此在這一層面上也可以認為是「不可逆」的。有人會問,上一段的例子是人為構造的極端情況,現實中有沒有一種摘要演算法不具備抗「弱碰撞」的性質呢?其實是有的,最常見的是CRC演算法,它與md5一樣可以用於校驗數據傳輸的穩定性,但是並不能用於保存密碼和登錄,因為它的線性結構容易被破解而生成具有同樣CRC值的不同原文。

(多說一句,md5在抗「強碰撞」上已被證明是不可靠的,因此在另外一些情形中已經不再適用,比如數字簽名等領域。)

further:為什麼知道了md5的演算法也不能逆推出原文或碰撞原文,這涉及到一些高深的密碼學知識,已經超出了我的能力。簡單地指一些方向:

一個優秀的密碼演算法,必須要具有良好的擴散(diffusion)性、擾亂(confusion)性和隨機性。由這些特性可以保證,演算法生成的密文的任意一位都與明文中的每一位息息相關,明文中哪怕一個位元組的微小改動都會引起最終結果的巨大變化。另外,還要求能抵禦已知的密碼分析方法,例如差分分析、線性分析等。


MD5不能直接反求源文件。Hash值都理應不可以。很簡單的道理:Hash值相比源文件常常缺失信息。源文件越長,Hash值越短,缺失就越多。

但這並不等於不能通過MD5找到源文件。相關閱讀:理論計算機初步:從hash函數到王小雲的MD5破解 ? 閱微堂

簡單說,就是MD5雖然不包含所有信息,但是有人發現了MD5演算法從原始信息中抽取信息的低熵路徑,於是最終可以通過MD5值猜出少量的可能原文,然後就可以從其中找出原文。這個方法稱為碰撞。

不過,這個方法依然受到信息缺失的影響,也就是說缺少的信息量越多,猜出的可能原文量就越大,找出原文的可能性就越渺茫。

而且,這僅僅是MD5這麼一種特殊的Hash演算法的問題,其他Hash演算法不受到同樣的影響,也就是說目前仍在推廣使用的Hash演算法沒有被人找出碰撞的方法。

不過,依然有其他方法去通過Hash找到原文。例如其他答案說的,只要原文Hash值始終不變,就可以通過暴力破解。除此之外,所有常見原文和對應的Hash值也可以被儲存起來,這樣只要原文碰巧是已知的,只要知道Hash值便可以知道原文。


md5長度是固定的。而文件的長度是不固定的。所以不可能夠做到一對一的啊。


要是能就好了,簡直就是計算機中的變幻膠囊,想想幾百部島國大片,通過md5被「壓縮」成16個位元組,然後再把它存儲到二維碼上,需要的時候手機一掃,再還原回來欣賞。。。得有多方便。。。


從理論上確實不可以,不過也有些曲線救國的方法,比如暴力破解,彩虹表破解,或者把密碼先計算好存儲起來破解,推薦幾個md5解密網站 http://www.cmd5.com http://www.ttmd5.com


顯然是不能的。

MD5 演算法具有不可逆性。

具體參考:三分鐘學習 MD5 - 知乎專欄


要是能,硬碟廠商都可以關門了。


雖然md5不可逆,但目前簡單的md5 hash已經被存入資料庫進行關聯。


謝邀。不過知乎上類似的問題太多了吧,搜一下就出來了的……

為什麼說 MD5 是不可逆的? - 演算法


還原文件是不行地 還原密碼倒是可以 保存md5值和對應的明文密碼到資料庫 就可以通過查詢獲得明文密碼了 只要資料庫足夠大 在線破解md5就是這麼玩兒的


從hash函數到王小雲的MD5破解 - MKing#x27;s Blog - 博客頻道 - CSDN.NET


可以,使用窮舉法,關鍵問題是,md5是多對一映射,不是一對一映射。用字典反解出來也有可能不是原義了


窮舉,所有加密方法的解密方式


如果md5能還原,人類進步一百年。


在實際應用中,已知DM5,然後用窮舉法得出密碼是不是一個思路?(我是外行,不要噴我)


可以

某些md5加上磁力鏈接的頭可以下載


摘要摘要,不可逆,

就好比一長篇新聞,總結一個100字以內的新聞摘要,能通過新聞摘要還原出原新聞嗎?


不能反編碼,但是可以窮舉,而且比較簡單常用會被做為字典


推薦閱讀:

MD5校驗會有極低的碰撞率,那麼經過MD5之後產生的16個位元組再次進行MD5運算會不會進一步降低碰撞率?
MD5 加密不是單向的嗎? 那為什麼網上還有在線 MD5 破解呢?
先用md5,再用sha1,這樣密碼會安全一點嗎?
為什麼現在網上有很多軟體可以破解MD5,但MD5還是很流行?
有哪些值得推薦的 MD5 在線解密網站?

TAG:數據安全 | MD5 | Java安全 |