首頁 >後端開發 >php教程 >md5可以解密嗎?

md5可以解密嗎?

阿神
阿神原創
2017-03-14 22:47:3114630瀏覽

    接觸過md5的人都知道,md5是不可以解密的,但為什麼網路上還有很多網站聲稱可以破解MD5,本文就來討論下這個問題。


    首先,的確如網路上所說,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以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)=(X&Y)|((~X)&Z);

    G(X,Y,Z)=(X&Z)|(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是無法解密的


    另外再不錯兩個知識點:

1.所謂加密:

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

2.所謂雜湊:

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


php md5加密可以破解嗎?

以上是md5可以解密嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn