Md5加密算法原理
MD5加密算法為現(xiàn)在應(yīng)用最廣泛的哈希算法之一,該算法廣泛應(yīng)用于互聯(lián)網(wǎng)網(wǎng)站的用戶文件加密,能夠?qū)⒂脩裘艽a加密為128位的長(zhǎng)整數(shù)。數(shù)據(jù)庫(kù)并不明文存儲(chǔ)用戶密碼,而是在用戶登錄時(shí)將輸入密碼字符串進(jìn)行MD5加密,與數(shù)據(jù)庫(kù)中所存儲(chǔ)的MD5值匹配,從而降低密碼數(shù)據(jù)庫(kù)被盜取后用戶損失的風(fēng)險(xiǎn)。
Md5加密算法原理
MD5加密算法以512位分組來(lái)處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過(guò)了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。
在MD5加密算法中,首先需要對(duì)信息進(jìn)行填充,使其字節(jié)長(zhǎng)度對(duì)512求余數(shù)的結(jié)果等于448。因此,信息的字節(jié)長(zhǎng)度(Bits Length)將被擴(kuò)展至N*512+448,即N*64+56個(gè)字節(jié)(Bytes),N為一個(gè)正整數(shù)。
填充的方法如下,在信息的后面填充一個(gè)1和無(wú)數(shù)個(gè)0,直到滿足上面的條件時(shí)才停止用0對(duì)信息的填充。然后再在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前的信息長(zhǎng)度。經(jīng)過(guò)這兩步的處理,現(xiàn)在的信息字節(jié)長(zhǎng)度=N*512+448+64=(N+1)*512,即長(zhǎng)度恰好是512的整數(shù)倍數(shù)。這樣做的原因是為滿足后面處理中對(duì)信息長(zhǎng)度的要求。
MD5中有四個(gè)32位被稱作鏈接變量(Chaining Variable)的整數(shù)參數(shù),他們分別為:
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
當(dāng)設(shè)置好這四個(gè)鏈接變量后,就開(kāi)始進(jìn)入算法的四輪循環(huán)運(yùn)算,循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目。
將上面四個(gè)鏈接變量復(fù)制到另外四個(gè)變量中:A到a,B到b,C到c,D到d。 主循環(huán)有四輪(MD4只有三輪),每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對(duì)a、b、c和d中的其中三個(gè)作一次非線性函數(shù)運(yùn)算,然后將所得結(jié)果加上第四個(gè)變量(文本中的一個(gè)子分組和一個(gè)常數(shù))。
再將所得結(jié)果向右環(huán)移一個(gè)不定的數(shù),并加上a、b、c或d中之一。最后用該結(jié)果取代a、b、c或d中之一。 以一下是每次操作中用到的四個(gè)非線性函數(shù)(每輪一個(gè))。
| 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)) |
其中,?是異或,∧是與,∨是或, 是反符號(hào)。
如果X、Y和Z的對(duì)應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也應(yīng)是獨(dú)立和均勻的。F是一個(gè)逐位運(yùn)算的函數(shù)。即,如果X,那么Y,否則Z。函數(shù)H是逐位奇偶操作符。所有這些完成之后,將A,B,C,D分別加上a,b,c,d。然后用下一分組數(shù)據(jù)繼續(xù)運(yùn)行算法,最后的輸出是A,B,C和D的級(jí)聯(lián)。最后得到的A,B,C,D就是輸出結(jié)果,A是低位,D為高位,DCBA組成128位輸出結(jié)果。
Md5加密算法的應(yīng)用
MD5加密算法由于其具有較好的安全性,加之商業(yè)也可以免費(fèi)使用該算法,因此該加密算法被廣泛使用,md5加密算法主要運(yùn)用在數(shù)字簽名、文件完整性驗(yàn)證以及口令加密等方面。









