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))
/* rotate_left 將x迴圈左移n位 */
#define rotate_left(x,n) ((x << n) | (x >> (32-n)))
/* 迴圈從加法中分離出是為了防止重複計算*/
#define ff(a,b,c,d,x,s,ac) \
#define gg(a,b,c,d,x,s,ac) \
#define hh(a,b,c,d,x,s,ac) \
#define ii(a,b,c,d,x,s,ac) \
/*初始化md5的結構*/
void md5init(md5_ctx *context);
/*將與加密的資訊傳遞給md5結構,可以多次呼叫
context:初始化過了的md5結構
input:欲加密的資訊,可以任意長
inputlen:指定input的長度*/
void md5update(md5_ctx *context, unsigned char *input, unsigned int inputlen);
/*獲取加密 的最終結果
digest:儲存最終的加密串
context:你前面初始化並填入了資訊的md5結構*/
void md5final(md5_ctx *context, unsigned char digest[16]);
/*對512bits資訊(即block緩衝區)進行一次處理,每次處理包括四輪
state[4]:md5結構中的state[4],用於儲存對512bits資訊加密的中間結果或者最終結果
block[64]:欲加密的512bits資訊
*/void md5transform(unsigned int state[4], unsigned char block[64]);
/*位元組轉換函式
output:用於輸出的字元緩衝區
input:欲轉換的四位元組的整數形式的陣列
len:output緩衝區的長度,要求是4的整數倍
*/void md5encode(unsigned char *output, unsigned int *input, unsigned int len);
/*與上面相反的轉換函式
output:儲存轉換出的整數
input:欲轉換的字元緩衝區
len:輸入的字元緩衝區的長度,要求是4的整數倍
*/void md5decode(unsigned int *output, unsigned char *input, unsigned int len);
#endif
md5.c
#include #include "md5.h"
unsigned char padding = ;
/*初始化md5的結構*/
void md5init(md5_ctx *context)
/*將與加密的資訊傳遞給md5結構,可以多次呼叫
context:初始化過了的md5結構
input:欲加密的資訊,可以任意長
inputlen:指定input的長度*/
void md5update(md5_ctx *context, unsigned char *input, unsigned int inputlen)
else
/* buffer remaining input */
/*將輸入緩衝區中不足512bits的剩餘內容填充到context->buffer中,留待以後再作處理*/
memcpy(&context->buffer[index], &input[i], inputlen - i);
}/*獲取加密 的最終結果
digest:儲存最終的加密串
context:你前面初始化並填入了資訊的md5結構*/
void md5final(md5_ctx *context, unsigned char digest[16])
/*位元組轉換函式(unsigned int * to unsigned char *)
output:用於輸出的字元緩衝區
input:欲轉換的四位元組的整數形式的陣列
len:output緩衝區的長度,要求是4的整數倍
*/void md5encode(unsigned char *output, unsigned int *input, unsigned int len)
}/*與上面相反的轉換函式((unsigned char * to unsigned int *))
output:儲存轉換出的整數
input:欲轉換的字元緩衝區
len:輸入的字元緩衝區的長度,要求是4的整數倍
*/void md5decode(unsigned int *output, unsigned char *input, unsigned int len)}/*
對512bits資訊(即block緩衝區)進行一次處理,每次處理包括四輪
state[4]:md5結構中的state[4],用於儲存對512bits資訊加密的中間結果或者最終結果
block[64]:欲加密的512bits資訊
*/void md5transform(unsigned int state[4], unsigned char block[64])
test.cpp
#include #include #include extern "c"
;int main(int argc, char *argv)
putchar('\n');
return 0;
}
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...
java實現MD5演算法
public class md5 src class md5 static final byte padding private long state private long count private byte buffer public string digesthexstr private ...
md5演算法簡單實現
md5演算法步驟詳解 md5演算法的c 實現 看完網上文件後,主要的問題是,對於輸入的資訊你要怎麼進行補位這些操作啊?因為自己是渣渣,而且又沒有深究,所以就姑且用vector來實現了,也不夠優,還是有機會就再來優化吧!直接上 標頭檔案 mymd5.h ifndef mymd5 h define my...