MD5加密演算法C語言實現

2021-07-22 08:05:20 字數 1675 閱讀 2131

#include#include#include#include#include#define block_len 64

#define max_blocks 9

#define message_len (block_len*(max_blocks-1))

#define result_len 33

//md5演算法的上下文,儲存一些狀態,中間資料,結果

typedef struct md5_data md5_data;

typedef struct encoder_data encoder_data;

static inline int s(int x, int s)

static inline md5_data * update(md5_data *data)

//新增長度,並儲存

*(long long *)((m+56))=(long long )bits;

data->ms[data->nblocks++]=m;

finish=1;//結束標記

} else

data->ms[data->nblocks++]=m;//儲存快

m=initm();//分配新的塊

len-=64;//每讀512位減64 ,正好為 64時,進入下一迴圈,也不會處理

} }return data;

}static inline md5_data * process(md5_data *data) ;

static char move[16] = ;

//printf("\n------------------->%d\n",nblocks);

// for(i = 0; i < nblocks ;i++)

// }

for(i=0; ims[i];

a=data->h[0];

b=data->h[1];

c=data->h[2];

d=data->h[3];

for(int i=0; i<64; i++)

data->h[0]+=a;

data->h[1]+=b;

data->h[2]+=c;

data->h[3]+=d;

} return data;

}static inline char * finish(md5_data *data)

char * md5(encoder_data *encoder) ;

//printf("%s",data.str);

return finish(process(update(init(&data,encoder))));

}int main();

// s=sha_1(&encoder);

// printf("message:%s\n",encoder.message);

// printf("md5:%s\n",s);

static char test_buf[7][81] = ,

, ,

, ,

, }; static const unsigned char md5_test_sum[7][result_len] = ,

, ,

, ,

, }; for(int i=0; i<7; ++i)

}}

MD5 加密演算法 c語言

摘自openssl global.h ifndef prototypes define prototypes 0 endif pointer defines a generic pointer type typedef unsigned char pointer uint2 defines a tw...

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在訊息後...