winmd5

winmd5

MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。 MD5將任意長度的“位元組串”變換成一個128bit的大整數,並且它是一個不可逆的字元串變換算法,換句話說就是,即使你看到源程式和算法描述,也無法將一個MD5的值變換回原始的字元串,從數學原理上說,是因為原始的字元串有無窮多個,這有點象不存在反函式的數學函式。

簡介

WinMD5 MD5簡介

Message-Digest泛指位元組串(Message)的Hash變換,就是把一個任意長度的位元組串變換成一定長的大整數。請注意我使用了“位元組串”而不是“字元串”這個詞,是因為這種變換隻與位元組的值有關,與字元集或編碼方式無關。

具體步驟

補位

MD5算法先對輸入的數據進行補位,使得數據位長度LEN對512求余的結果是448。即數據擴展至K*512+448位。即K*64+56個位元組,K為整數。

具體補位操作:補一個1,然後補0至滿足上述要求。

補數據長度

用一個64位的數字表示數據的原始長度B,把B用兩個32位數表示。這時,數據就被填補成長度為512位的倍數。

初始化MD5參數

四個32位整數 (A,B,C,D) 用來計算信息摘要,初始化使用的是十六進制表示的數字

A=0X01234567

B=0X89abcdef

C=0Xfedcba98

D=0X76543210

處理位操作函式

X,Y,Z為32位整數。

F(X,Y,Z) = X&Y|NOT(X)&Z

G(X,Y,Z) = X&Z|Y?(Z)

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

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

主要變換過程

使用常數組T[1 ... 64], T為32位整數用16進制表示,數據用16個32位的整數數組M[]表示。

具體過程如下:

/* 處理數據原文 */

For i = 0 to N/16-1 do

/*每一次,把數據原文存放在16個元素的數組X中. */

For j = 0 to 15 do

Set X[j] to M[i*16+j].

end /結束對J的循環

/* Save A as AA, B as BB, C as CC, and D as DD.*/

AA = A

BB = B

CC = C

DD = D

/* 第1輪*/

/* 以 [abcd k s i]表示如下操作 a = b + ((a + F(b,c,d) + X[k] + T)

相關詞條

相關搜尋

熱門詞條

聯絡我們