為什麼現在網上有很多軟體可以破解MD5,但MD5還是很流行?

網上也有MD5加密的詳細演算法,這樣安全嗎?


1、演算法的公開並不意味著不安全;RSA 的演算法也是公開的,AES 也是公開的。現代密碼學的安全性從不是靠演算法的保密來保證的。

2、目前沒有軟體能有效地破解 MD5。大多數時候只是把常見字元串的 MD5 存了起來為彩虹表,然後直接反查。

3、再次強調 MD5 只是哈希,而不是加密。MD5 是沒有可能解密的,因為一個 MD5 可能對應無數種可能的明文。

4、MD5 目前來說還是可以用的,尤其是考慮到合適的加鹽以後可以解決大多數彩虹錶帶來的危險。當然現在已經很多人提倡用 SHA 系列的哈希演算法取代 MD5。

對密碼學一竅不通,以上都是我亂編的,實在編不下去了……


我的畢業論文就是討論md5和base64結合起來的密碼加密系統。當時也是研究了很長的時間了。所以希望有點幫助吧。
首先,的確如同樓主所說,md5有很多很多的破解版本,可以逆向破解,但,僅僅基於跑字典。所謂的跑字典也就是將一些常用的單詞,片語的md5編碼用來對比。注意!是「常用」!
如果有人不能理解常用是什麼意思,我舉個數學例子。
假設x=1的時候y=1,x=0的時候y=0.大家的第一反應這個函數是什麼?y=x^n(n&>0)or (y-0.5)^2+(x-0.5)^2=(0.5)^2
這就是常用函數。
那什麼叫做不常用呢?還是上面那個條件:y=log2(x+1)
好吧,其實還是個常用函數= =,但編一個不常用的太麻煩了- -大家原諒我偷懶一下吧。
突然靈光一現,想到個不常用的函數:y=∫(上限1)(下限0)(8x^3+8x^2-16x)dx
=======================介紹md5實質的分割線=============================
以下摘自論文

MD5以512位分組來處理輸入的信息,其中每一分組又被劃分為16個32位子分組,經過了一系列的處理之後,演算法的輸出有四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。在MD5演算法中,首先需要對信息進行處理,使其位元組長度對512求余為448。因此,信息的位元組長度將被擴展至N*512+448,即N*64+56個位元組,其中N為一個正整數。填充的方法如下,在信息的最後填充1個1,然後後面用0補足,直到滿足條件。然後,在這個結果之後附加一個以64位二進位表示的填充前信息長度。經過這兩步處理,信息的直接長度轉變為N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做是為了滿足後面處理中對信息長度的要求。

MD5中有四個32位被稱作連接變數的整數參數,它們分別為:

A=0x01234567;

B=0x89abcdef;

C=0xfedcba98;

D=0x76543210。

還有4個處理位操作函數,它們分別為:

F(X,Y,Z)=(XY)|((~X)Z);

G(X,Y,Z)=(XZ)|(Y(~Z));

H(X,Y,Z)=X^Y^Z;

I(X,Y,Z)=Y^(X|(~Z));

其中,X,Y,Z分別代表任意32位整數。是與運算,|是或運算,~是非運算,^是異或運算[4]。

其具體步驟為:

首先,將A複製到a變數,B複製到b變數,C複製到c變數,D複製到d變數。然後,進行四輪主循環,每一輪進行16次操作。每次操作對a,b,c,d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數、文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a,b,c,d中之一。

好了,我們可以清楚的知道,md5就是把不論什麼長度的文字內容,給精簡成128位散列數。不論文字內容只有一個字母a,還是1w多字的長篇論文,都精簡(或填充)成128位散列數。這就造成了破解幾乎成為了不可能

為什麼這麼說呢?還是剛剛那個例子,我告訴你結果「x=0,時y=0;x=1時y=1」但我不告訴(其實也沒人會去統計文檔裡面有多少字元)你這是個什麼函數,是log函數呢還是線性函數,亦或是高次函數?都不知道,請問,該怎麼破解?

而且,其實在加密領域,DES和RSA才是真正的加密,而MD5更多的用在文檔校驗上,用來生成密鑰檢測文檔是否被篡改。

=======================簡單動手實驗的分割線=============================
簡單的實驗可以用以下兩個網站:
將文本轉換為md5與base64結合的代碼:Hash Generator(提示一下,這個網站的md5選項出現的已經是文本先經過base64編碼,在用md5哈希出的結果)
反向破解:md5解密,md5在線查詢破解,XMD5
作為個人的惡習,我給出我做的兩個實例。
簡單片語如下:

複雜片語如下:

答案一目了然。
=======================知識點補充說明的分割線=============================
所謂加密:

加密技術是最常用的安全保密手段,利用技術手段把重要的數據變為亂碼(加密)傳送,到達目的地後再用相同或不同的手段還原(解密)。
加密技術包括兩個元素:演算法和演算法是將普通的信息或者可以理解的信息與一串數字)結合,產生不可理解的密文的步驟,密鑰是用來對數據進行編碼和解密的一種演算法。在安全保密中,可通過適當的鑰加密技術和管理機制來保證網路的信息通信安全。

所謂哈希:

Hash,一般翻譯做"散列」,也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的信息摘要的函數。
HASH主要用於信息安全領域中加密演算法,他把一些不同長度的信息轉化成雜亂的128位的編碼里,叫做HASH值. 也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關係。
Hash演算法在信息安全方面的應用主要體現在以下的3個方面:
1) 文件校驗
我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。
2) 數字簽名
Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。 對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3) 鑒權協議
如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。

以上摘自百度
=======================吐槽知乎引用功能的分割線===========================
能進入引用,卻沒有退出引用這個功能- -實在是難過= =每次都要提前打好空餘行,否則就一直在引用內,就算是選擇段落引用也會把後續的加進來。這個功能實在是不」友好「呢。

樓下瞌睡龍所說的hash碰撞,只能成立於有完全一模一樣的明文存在的情況下才可能實現。其可能性在於有一個巨大的資料庫,按一定方法排列組合,靠計算機強大的運算速度破解。可惜的是,如同我自己在編程時候的習慣,很多人在編程序或者寫文章之後會無意識加上大量的回車符或者空格符。理論上,只要你的加密內容在資料庫找不到一摸一樣的(連一個符號都不能錯,不能少空格,以及各類看不見但其實在ASCII編碼中存在的字元),那你的數據就無法被破解。


樓主的問題解釋的確存在錯誤!現代密碼學的安全基礎是密鑰的保密性,而不是像古典密碼學那樣基於演算法的保密性。也就是在密碼學書籍的第一章經常看到的那句話:「一個密碼系統的安全性只在於密鑰的保密性,而不在於演算法的保密性。」
而且你所說的那些破解軟體,就像上面樓層裡面所說的,都是在已有的明文密碼基礎上製作彩虹表進行反查得到的,並不是真正的破解,對於一些生僻的複雜的密碼很難查到,可以去試試。
目前對MD5進行破解最有成效的就是2004年山東大學王小雲教授團隊在國際密碼學大學上提出的演算法,可以在數小時之內做到散列衝撞(也不是真正的破解),已經威脅到了MD5的安全。同樣,另一個常用的散列函數SHA-1也被他們拿下。王小雲是我大學計算機教材里唯一見到的中國人名字...


MD5不存在反向破譯的問題,面對的最大威脅是碰撞,但它在設計的時候已經考慮了防碰撞的問題,所以想通過碰撞來偽造簽名的難度極大,最簡單的防攻擊辦法就是在簽名的時候串入一個隨機數或簽名時間


之前跟一些程序員交流過,讓我驚訝的是至今很多人仍然相信MD5的保密性。

我用了MD5 hash保存之後,即使資料庫泄露也不會造成用戶的明文密碼泄露,或許他們了解MD5的演算法,認為這種hash不可能被逆向出來。

但實際上,真正想要破解你MD5的人是不會逆向你的明文密碼的,全部都是hash碰撞,把一堆明文密碼MD5 hash一邊之後對比哪個MD5值與你的一樣,那你的明文就知道了。

現實中,應該有人已經有過億的明文密碼對應的hash,你如果說過億的量也不是很大嘛,如果「大小寫字母、數字、特殊字元」都包含的話,也沒多少位,我來個高強度密碼就是了,肯定碰撞不到,這你就大錯而特錯了,實際上,他的過億的明文密碼都是別人使用過的互聯網中真實存在的密碼,用那一部分hash之後再做碰撞,你覺得成功率多少呢?很高很高……

你覺得網站的MD5加鹽之後會好一些,實際上呢,只要你演算法泄露了,你的鹽別人知道了,按照你的演算法,再加上那過億的明文密碼,碰撞出絕大部分用戶的密碼是一件很簡單的事情。

當然了「大小寫字母、數字、特殊字元」的彩虹表也是必不可少的,防止有些密碼並不存在於那些明文中,所以高強度密碼也是必要的,但如果你的高強度密碼不小心在某個網站被明文保存了,建議更換掉吧,當然你是不知道他是怎麼保存的,所以呢……(我是重要網站全部隨機生成高強度密碼,這個對所有網民這樣要求是不合適的,所以呢,就導致了撞庫的行為)。

那麼多明文的密碼來自何處呢,來自於各種明文保存密碼的網站,被黑客攻破了,然後保存了下來。

以上就是現實互聯網安全中的一小部分。

MD5的演算法公開並不是其不安全的原因,那已經泄漏的過億的明文密碼才是。


理論上md5是不可逆的,而且MD5本來也不是作加密使用,而是用來校驗數據的完整性,只是因為其不可逆且穩定、快速的特點,被廣泛用於對明文密碼的加密。


但是簡單密碼來說,破解者完全可以將一定範圍內的密碼字典全部計算出來之後存為資料庫,之後直接查詢進行破解,比如這個網站:MD5在線破解, MD5加密解密, MD5 Crack, MD5 Encrypt, MD5.com.cn


對於用戶來說,使用更高強度密碼可以降低這種風險;而對於開發者來說,對原始字串簡單加密之後再MD5是比較簡單的選擇。


PS:一切使用明文存儲用戶密碼的網站都是耍流氓。


有加密演算法不影響它不可逆啊。破解的話類似http://cmd5.la這類網站,都是碰撞原理,無法百分之百破解的。而且已經用了這麼久,你讓網站怎麼去換演算法。比如,你原來AAA的密碼,在你網站裡面存的是md5加密後的BBB。然後你如何把所有用戶的BBB換成AAA再用另一個演算法加密保存?所以一開始用md5現在就沒辦法,只能繼續md5啊,除非你一個個用戶讓他們來換密碼,然後你就可以一個個用另一個演算法來保存了,不是所有網站都跟CSDN一樣還要保存一份明文密碼的,大部分網站還是規規矩矩保存密文的。


網上的「MD5」破解,不是正在的破解,而是正好庫裡面有這些簡單的詞,另外MD5原文越複雜,破解是通過碰撞演算法實現的,但是需要很大的算力,數千 上萬?年的計算才行


世事很少有絕對的,安全領域也一樣。
所謂的破解md5隻不過是通過提高計算能力或者使用彩虹表等輔助方法,能夠以一定概率恢復一定範圍內的明文(弱口令等)罷了,只能說一定程度上降低了md5加密(hash)的安全性,並沒有很大程度上影響到md5在其他方面的使用(做摘要等)。
以現在md5的使用情況來說,離被「破解」還很遠。


為什麼很流行?
媽蛋,老子還要改那麼多需求,那麼多bug,csdn都是明文,幫你md5加密下不錯了!!!

所以要要輸入一個機智的密碼。

CSDN杯我最喜歡的密碼比賽 :

總冠軍:ppnn13%dkstFeb.1st。中文解析:娉娉裊裊十三餘,豆蔻梢頭二月初。

冠軍:hold?fish:palm(魚和熊掌不可兼得)

亞軍:hanshansi.location()!∈[gusucity](姑蘇城外寒山寺)

季軍:FLZX3000cY4yhl9day (飛流直下三千尺,疑似銀河落九天)


加個自定義的salt就很難被破解了,至少被在線破解是不可能,不過暴力的話如果人家知道你的salt密碼太簡單也是容易被破。 分享一些免費的MD5解密網站


推薦閱讀:

有哪些值得推薦的 MD5 在線解密網站?

TAG:破解 | 演算法 | 加密 | 密碼 | MD5 |