此演算法使用c++寫成。更多詳細內容可參考github專案
①填充字串函式:在長度為k bits的原始訊息尾部填充長度為p bits的標識(1000…00),其中1 <= p <= 512(即至少需要填充乙個bit),使得填充後的訊息位數為 k+p ≡ 448(mod 512)。注意,當k ≡ 448(mod 512)時,填充的位元組數 p = 512 bit。填充得到上述訊息後,在尾部附加k值的低64位,最後得到乙個長度為 k+p+64 ≡ 0(mod 512)的訊息。
②字串分塊函式:將填充好的字串分割成l個長度為512bit的分組
③迴圈壓縮函式:對每個512-bit分組進行64輪迭代運算
(1)對分組(a,b,c,d)中的a進行迭代運算
公式為:a <= b + ((a + g(b,c,d) + x[k] + t[i])) << s[i]
其中:· a,b,c,d代表md5緩衝區當前的數值
· g為輪函式,1-16輪迭代使用f函式,17-32輪迭代使用g函式,33-48輪迭 代使用h函式,49-64輪迭代使用i函式
· x[k]代表當前處理訊息分組的第k個32位字,x[k]由第n輪迭代對應的順序表決定
· t[i]代表t表的第i項的值,t[i] = int(2^32 * |sin(i)|)
· s[i]對應第i輪的左迴圈移位的s值
(2)對分組(a,b,c,d)作迴圈輪換
公式為:(b,c,d,a)<=(a,b,c,d)
④md5編碼函式:用於呼叫前面的功能函式進行md5編碼
(1)輸入待加密的明文本串
(2)對明文本串進行填充
(3)對填充後的明文本串進行分塊(yq)
(4)使用預設的初始值初始化md5緩衝區間(iv)
(5)對各個分塊字串利用公式hmd5(cvi-1, yi)進行迴圈壓縮,運算結果作為下一塊的輸入(cvi)
當所有的分塊迭代完成後,輸出結果cvl,l表示最後乙個分塊的序號
1. 64輪迭代
2. 單次迭代的計算步驟
3. 4輪迴圈所使用的生成函式
md5// f函式
unsigned
intf
(unsigned
int b,
unsigned
int c,
unsigned
int d)
// g函式
unsigned
intg
(unsigned
int b,
unsigned
int c,
unsigned
int d)
// h函式
unsigned
inth
(unsigned
int b,
unsigned
int c,
unsigned
int d)
// i函式
unsigned
inti
(unsigned
int b,
unsigned
int c,
unsigned
int d)
// 移位操作函式
unsigned
intshift
(unsigned
int a,
unsigned
int n)
// 編碼函式
string encode
(string src)
iteratefunc
(num,16)
;}return
format
(tempa)
+format
(tempb)
+format
(tempc)
+format
(tempd);}
// 迴圈壓縮
void
iteratefunc
(unsigned
int* x,
int size =16)
else
if(i <32)
else
if(i <48)
else
rec = d;
d = c;
c = b;
b = b +
shift
(a + g + x[k]
+ t[i]
, s[i]);
a = rec;
} tempa +
= a;
tempb +
= b;
tempc +
= c;
tempd +
= d;
}// 填充字串
vector<
unsigned
int>
padding
(string src)
// 補充1000...000
rec[src.
length()
>>2]
|=0x80
<<
((src.
length()
%4)*
8);// 填充原文長度
rec[rec.
size()
-2]= src.
length()
<<3;
return rec;
}// 整理輸出
string format
(unsigned
int num)
res +
= tmp;
}return res;}}
;int
main()
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發展而來。訊...