MD演算法C 程式設計和實現

2021-09-11 18:04:57 字數 2698 閱讀 1493

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碼...