Md5加密算法原理

MD5加密算法為現(xiàn)在應(yīng)用最廣泛的哈希算法之一,該算法廣泛應(yīng)用于互聯(lián)網(wǎng)網(wǎng)站的用戶文件加密,能夠?qū)⒂脩裘艽a加密為128位的長整數(shù)。數(shù)據(jù)庫并不明文存儲用戶密碼,而是在用戶登錄時將輸入密碼字符串進(jìn)行MD5加密,與數(shù)據(jù)庫中所存儲的MD5值匹配,從而降低密碼數(shù)據(jù)庫被盜取后用戶損失的風(fēng)險。

Md5加密算法原理

MD5加密算法以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。

在MD5加密算法中,首先需要對信息進(jìn)行填充,使其字節(jié)長度對512求余數(shù)的結(jié)果等于448。因此,信息的字節(jié)長度(Bits Length)將被擴(kuò)展至N*512+448,即N*64+56個字節(jié)(Bytes),N為一個正整數(shù)。

填充的方法如下,在信息的后面填充一個1和無數(shù)個0,直到滿足上面的條件時才停止用0對信息的填充。然后再在這個結(jié)果后面附加一個以64位二進(jìn)制表示的填充前的信息長度。經(jīng)過這兩步的處理,現(xiàn)在的信息字節(jié)長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數(shù)倍數(shù)。這樣做的原因是為滿足后面處理中對信息長度的要求。

MD5中有四個32位被稱作鏈接變量(Chaining Variable)的整數(shù)參數(shù),他們分別為:

A=0x01234567

B=0x89abcdef

C=0xfedcba98

D=0x76543210

當(dāng)設(shè)置好這四個鏈接變量后,就開始進(jìn)入算法的四輪循環(huán)運算,循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目。

將上面四個鏈接變量復(fù)制到另外四個變量中:A到a,B到b,C到c,D到d。 主循環(huán)有四輪(MD4只有三輪),每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數(shù)運算,然后將所得結(jié)果加上第四個變量(文本中的一個子分組和一個常數(shù))。

再將所得結(jié)果向右環(huán)移一個不定的數(shù),并加上a、b、c或d中之一。最后用該結(jié)果取代a、b、c或d中之一。 以一下是每次操作中用到的四個非線性函數(shù)(每輪一個)。

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的對應(yīng)位是獨立和均勻的,那么結(jié)果的每一位也應(yīng)是獨立和均勻的。F是一個逐位運算的函數(shù)。即,如果X,那么Y,否則Z。函數(shù)H是逐位奇偶操作符。所有這些完成之后,將A,B,C,D分別加上a,b,c,d。然后用下一分組數(shù)據(jù)繼續(xù)運行算法,最后的輸出是A,B,C和D的級聯(lián)。最后得到的A,B,C,D就是輸出結(jié)果,A是低位,D為高位,DCBA組成128位輸出結(jié)果。

Md5加密算法的應(yīng)用

MD5加密算法由于其具有較好的安全性,加之商業(yè)也可以免費使用該算法,因此該加密算法被廣泛使用,md5加密算法主要運用在數(shù)字簽名、文件完整性驗證以及口令加密等方面。