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