4 資料結構
5 編譯執行結果
6 源**
md5,即message-digest algorithm 5 (資訊-摘要演算法5),是廣泛使用的hash 演算法,用於確保資訊傳輸的完整性和一致性。 md5 使用little-endian(小端模式),輸入任意不定長度資訊,以 512-bit 進行分組,生成四個32-bit 資料,最後聯合輸出固定 128-bit 的資訊摘要。 其基本過程為:填充、分塊、緩衝區初始化、迴圈壓縮、得出結果。
基本流程圖如下:
物件導向程式設計,在類內定義各個變數和函式,可以使架構更加清晰。
unsigned int為32-bit無符號整數,正好可以對應乙個32-bit分組。
使用了rcf 1321中給出的標準測試樣例進行測試:
// 各次迭代運算採用的t值, t[i] = int((2^32)*|sin(i)|)
const byte4 t=
;// 各次迭代運算採用的左迴圈移位的s值
const byte4 s=
;// 各輪迴圈中迭代使用的x[k]的下標
const byte4 k=
;md5::
md5(
const string &input)
/* * 填充及分塊
*/void md5::
padding()
/* * 初始化md快取區
*/void md5::
init()
/* * 迴圈壓縮
*/void md5::
transform
(byte8 blocknum)
else
if(i <32)
else
if(i <48)
else
byte4 temp = d;
d = c;
c = b;
b = a;
a = temp;
} a +
= a;
b += b;
c += c;
d += d;}/*
* 把整數轉為字串
*/string md5::
tostring
(byte4 a)
return result;}/*
* 獲取md5
*/string md5::
ge***5()
main.cpp
// main.cpp
#include
"md5.hpp"
#define len 7
intmain()
; string expected[len]=;
for(
int i =
0; i < len; i++
)return0;
}
MD5演算法實現
md5.h ifndef md5 h define md5 h typedef struct md5 ctx 非線性輔助函式 define f x,y,z x y x z define g x,y,z x z y z define h x,y,z x y z define i x,y,z y x z...
MD5演算法實現
md5.h ifndef md5 h define md5 h typedef struct md5 ctx 非線性輔助函式 define f x,y,z x y x z define g x,y,z x z y z define h x,y,z x y z define i x,y,z y x z...
MD5演算法理論和實現
md5是訊息摘要演算法第5版,它是一種在計算機安全領域廣泛使用的一種雜湊函式,用來提供訊息完整性保護。任意長度的資料算出來的md5值長度都是一樣的,均為128bit,而且即使只修改原始資料的極小一部分,也會使算出的md5值產生很大的變化。十年前,2005年山東大學的王小雲教授發表 說可以破解md5碼...