詳細(xì)了解MD5加密算法

MD5加密算法

對(duì)于MD5而言,有兩個(gè)特性是很重要的,第一是任意兩段明文數(shù)據(jù),加密以后的密文不能是相同的;第二是任意一段明文數(shù)據(jù),經(jīng)過加密以后,其結(jié)果必須永遠(yuǎn)是不變的。 前者的意思是不可能有任意兩段明文加密以后得到相同的密文,后者的意思是如果我們加密特定的數(shù)據(jù),得到的密文一定是相同的。
對(duì)MD5算法簡(jiǎn)要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。 下面分步介紹如下:

第一步:增加填充。 增加padding使得數(shù)據(jù)長(zhǎng)度(bit為單位)模512為448。 如果數(shù)據(jù)長(zhǎng)度正好是模512為448,增加512個(gè)填充bit,也就是說填充的個(gè)數(shù)為1一512。第一個(gè)bit為1,其余全部為0。

第二步:補(bǔ)足長(zhǎng)度。 將數(shù)據(jù)長(zhǎng)度轉(zhuǎn)換為64bit的數(shù)值,如果長(zhǎng)度超過64bit所能表示的數(shù)據(jù)長(zhǎng)度的范圍,值保留最后64bit,增加到前面填充的數(shù)據(jù)后面,使得最后的數(shù)據(jù)為512bit的整數(shù)倍。也就是32bit的16倍的整數(shù)倍。 在RFC1321中,稱為一個(gè)word。

第三步:初始化變量。 用到4個(gè)變量,分別為A、B、C、D, 均為32bit長(zhǎng)。 初始化為:

A:01 23 45 67

B:89 ab cd ef

C:fe dc ba 98

D:76 54 32 10

第四步:數(shù)據(jù)處理。首先定義4個(gè)輔助函數(shù):

F(X,Y,Z) = XY v not(X) Z

G(X,Y,Z) = XZ v Y not(Z)

H(X,Y,Z) = X xor Y xor Z

I(X,Y,Z) = Y xor (X v not(Z))

其中:X Y表示按位與,X v Y 表示按位或,not(X)表示按位取反,xor表示按位異或。 函數(shù)中的X、Y、Z均為32bit。定義一個(gè)需要用到的數(shù)組:T(i),i取值1一64,T(i)等于abs(sin(i))的4294967296倍的整數(shù)部分,i為弧度。 假設(shè)前三步處理后的數(shù)據(jù)長(zhǎng)度為32*16*Nbit。

第五步:輸出:最后得到的ABCD為輸出結(jié)果,共128bit。 A為低位,D為高位。