加密演算法 MD5深入學習

2021-10-01 20:43:03 字數 1360 閱讀 8663

任意長度的輸入都輸出128位的雜湊值。

md5以512位分組來處理輸入的訊息,且每一分組又被劃分為16個32位子分組,mj表示,經過處理後,輸出由4個32位分組級聯成的128位雜湊值。

將輸入資訊m按順序每512位一組進行分組:m = m1,m2,…,mn-1,mn

分為兩次填充,第一次填充後的大小對521取餘結果為448;第二次再加上64位(該64位負責紀錄資訊的總長度),使最後乙個448位也為512位。

將資訊m的「最後」乙個分組mn長度填充為448位方法如下:

當mn長度l(bit為單位) < 448時,在資訊mn後加乙個「1」,然後再填充若干個「0」,使最後的資訊mn長度為448位。

當mn長度l > 448時,在資訊mn後加乙個「1」,然後再填充512-l+448個「0」,使最後的資訊mn長度為512位,mn+1長度為448位

a=0x01234567

b=0x89abcdef

c=0xfedcba98

d=0x76543210

(1)將填充後的資訊mi認作為一塊(block),每塊按32位為一組劃分成16個分組,即 mi = mi0,mi2,…,mi15,i = 1 ~ n。

(2)分別對每一塊資訊進行4輪計算(即主迴圈)。

每輪定義乙個非線性函式。

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));

(&是與,|是或是非,⊕是異或)

將a、b、c、d這四個變數分別複製到變數a、b、c、d中。

每一輪進行16次操作,每次操作對a、b、c、d中的三個變數作一次非線性函式運算,然後將所得的結果與第四個變數、資訊的乙個分組mj和乙個常數ti相加。再將所得的結果迴圈左移乙個不定數s,並加上a、b、c、d中的乙個變數。

ff(a,b,c,d,mj,s,ti)表示a=b+((a+f(b,c,d)+mj+ti)每輪迴圈後,a=a+a,b=b+b,c=c+c,d=d+d,然後作為下一輪的初始化向量。最後的輸出是 a、b、c和 d的級聯,即a作為低位,d作為高位。

md5加密演算法

md5.h ifndef md5h define md5h include include void rol unsigned int s,unsigned short cx 32位數迴圈左移實現函式 void ltob unsigned int i b l互轉,接受uint型別 unsigned ...

MD5加密演算法

md5訊息摘要演算法 message digest algorithm 它對輸入的任意長度的訊息進行運算,產生乙個128位的訊息摘要。演算法原理 資料填充 填充訊息使其長度與448模512同餘 長度 448 mod 512 即時訊息長度本身已經滿足了上述長度要求也需要填充。填充方法 附乙個1在訊息後...

加密演算法 MD5

一 簡介 md5的全稱是message digest algorithm 5 資訊摘要演算法 在90年代初由mit laboratory for computer science和rsa data security inc的ronald l.rivest開發出來,經md2 md3和md4發展而來。訊...