1. 程式人生 > >MD5演算法可以破解麼?為什麼?網上有線上破解是怎麼回事?

MD5演算法可以破解麼?為什麼?網上有線上破解是怎麼回事?

答:MD5演算法不可以破解。

因為MD5是單向雜湊函式,輸入任意長度的資訊,經過處理,輸出為128位的資訊;不同的輸入得到的不同的結果;根據128位的輸出結果不可能反推出輸入的資訊。所以不能從密文(雜湊值)反過來得到原文,即沒有解密演算法。

MD5計算的過程中丟失了資訊,一個MD5的值可以對應多個原文。一個MD5理論上的確是可能對應無數多個原文的,因為MD5是有限多個的而原文可以是無數多個。比如主流使用的MD5將任意長度的“位元組串對映為一個128bit的大整數。也就是一共有2^128種可能,大概是3.4*10^38,這個數字是有限多個的,而但是世界上可以被用來加密的原文則會有無數的可能性。

舉個簡單例子:

原文:我今年大四

加密規則:

每個字取拼音聲調+筆畫數,最後的結果計算乘積,為了也使得我的結果始終保持在一個限定範圍內,取最後結果取其與2^14=16384的餘數,如“我”是73聲,也就是“特徵值10”,以此類推,今4+1=5 5+2=7 3+4=7 5+4=9,最後我發明的不可逆函式值就是10*5*7*7*9=2205016384的餘數,也就是5666,如果單單給5666這個數字和加密演算法,無論如何不可能推出原文是“我今年大四”的,不過如果給你“我今年大四”你卻很容易驗證答案是否正確。

網上有線上破解:

網上md5的破解主要都是採用暴力生成各種字串組合然後進行hash,很多使用者的密碼都不夠複雜,所以很容易被這種方式生成出來。防範這種方式的辦法一個是隨機

salt,只要salt夠隨機也夠長,就會帶來巨大的狀態空間,極大降低被暴力生成到的可能。另一個辦法是生成hash的速度夠慢,比如迭代1000次,這樣就大大降低了暴力運算的速度。

還有種破解就是採用彩虹表和字典:通過資料庫把常見字元轉的MD5儲存起來為彩虹表,然後直接反查。有兩種方法得到字典,一種是日常蒐集的用做密碼的字串表,另一種是用排列組合方法生成的,先用MD5程式計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。

比如我通過大量例子發現某密文中A對應C,然後我會記在資料字典中,下次直接用C代替A,看上去好像了破解了,實則並沒有破解,只是找到了規律適應這種密文而已。

PS:這是學校佈置的作業,也是自己查了資料後自己的觀點。