MD5摘要演算法實現

2021-09-06 22:20:22 字數 2152 閱讀 1346

網上找到的實現md5函式**,包括乙個標頭檔案md5.h和乙個原始檔md5.c,用下面的測試**test.c測試通過,各檔案依次如下:

標頭檔案md5.h:

1

#ifndef md5_h

2#define md5_h

34 typedef struct

5md5_ctx;

1011

12#define f(x,y,z) ((x & y) | (~x & z))

13#define g(x,y,z) ((x & z) | (y & ~z))

14#define h(x,y,z) (x^y^z)

15#define i(x,y,z) (y ^ (x | ~z))

16#define rotate_left(x,n) ((x << n) | (x >> (32-n)))

17#define ff(a,b,c,d,x,s,ac) \

1823

#define gg(a,b,c,d,x,s,ac) \

2429

#define hh(a,b,c,d,x,s,ac) \

3035

#define ii(a,b,c,d,x,s,ac) \

36

41void md5init(md5_ctx *context);

42void md5update(md5_ctx *context,unsigned char *input,unsigned int

inputlen);

43void md5final(md5_ctx *context,unsigned char digest[16

]);44

void md5transform(unsigned int state[4],unsigned char block[64

]);45

void md5encode(unsigned char *output,unsigned int *input,unsigned int

len);

46void md5decode(unsigned int *output,unsigned char *input,unsigned int

len);

4748

#endif

view code

原始檔md5.c:

1 #include 2 #include "

md5.h"3

4 unsigned char padding=;89

void md5init(md5_ctx *context)

1018

void md5update(md5_ctx *context,unsigned char *input,unsigned int

inputlen)

19

36else

3740 memcpy(&context->buffer[index],&input[i],inputlen-i);41}

42void md5final(md5_ctx *context,unsigned char digest[16

])43

53void md5encode(unsigned char *output,unsigned int *input,unsigned int

len)

5465}66

void md5decode(unsigned int *output,unsigned char *input,unsigned int

len)

6778}79

void md5transform(unsigned int state[4],unsigned char block[64

])80

view code

測試**test.c:

1 #include 2 #include 3 #include 

4 #include "

md5.h"5

6int main(int argc, char *argv)720

21getchar();

2223

return0;

24 }

view code

MD5實現HTTP摘要認證

摘要演算法又稱雜湊演算法,它表示輸入任意長度的資料,輸出固定長度的資料,它的主要特徵是加密過程不需要金鑰,並且經過加密的資料無法被解密,目前可以被解密逆向的只有crc32演算法,只有輸入相同的明文資料經過相同的訊息摘要演算法才能得到相同的密文。訊息摘要演算法不存在金鑰的管理與分發問題,適合於分布式網...

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