簡介
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)