MD5 是一个非常常用的算法,用于数字验证等很多方面,但是很多人只是想用这个算法,并不要求很了解其中的算法.其中也包括我在内,不过其实我也有适当的了解的.这里我就从Linux 2.6.36 中摘取出MD5部分并适当的修改了下,希望能对新手们有帮助,下面贴出代码:
MD5.h
#ifndef __HH_MD5_H_HH__
#define __HH_MD5_H_HH__
#include <string.h>
#define MD5_DIGEST_SIZE 16
#define MD5_HMAC_BLOCK_SIZE 64
#define MD5_BLOCK_WORDS 16
#define MD5_HASH_WORDS 4
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long int u64;
typedef struct md5_state {
u32 hash[MD5_HASH_WORDS];
u32 block[MD5_BLOCK_WORDS];
u64 byte_count;
}MD5_STATE;
/*
名称: md5_init
功能: 初始化MD5
参数:
输入:
1:struct md5_state *desc; MD5结构体
返回值:
return 0;
*/
int
md5_init(struct md5_state *desc);
/*
名称: md5_update
功能: 初始化MD5
参数:
输入:
1:struct md5_state *desc MD5结构体
2:const u8 *data 数据指针
3:unsigned int len 数据长度
返回值:
return 0;
*/
int
md5_update(struct md5_state *desc, const u8 *data, unsigned int len);
/*
名称: md5_final
功能: 获取结果
参数:
输入:
1:struct md5_state *desc MD5结构体
输出:
2:u8 *out 结果.长度为16 eg.u8 out[16];
返回值:
return 0;
*/
int
md5_final(struct md5_state *desc, u8 *out);
/*
名称: md5_cale
功能: 计算data指向的数据的MD5值,直接返回在out数组内
参数:
输入:
1:const u8 *data 数据指针
2:unsigned int len 数据长度
输出:
3:u8 *out 结果.长度为16 eg.u8 out[16];
返回值:
return 0;
*/
int
md5_cale(const u8 *data, unsigned int len,u8 *out);
#endif
md5.c
/*
文件 md5.c
日期: 2012-04-11 20:09
作者: LvApp
功能: MD5加密
用法:
1:实例变量 struct md5_state state;
2:初始化 md5_init(&state);
3:MS5计算 md5_update(&state,(u8*)"",strlen(""));
4:结果 md5_final(&state,res);
维护:
2012-04-11 20:09
1:从Linux内核中