md5整理

本文摘取自Linux 2.6.36内核的MD5实现,针对MD5算法进行了简化和解释,旨在帮助初学者理解并使用该算法,涉及加密和数字验证的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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("")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值