没有合适的资源?快使用搜索试试~ 我知道了~
MD5加密算法-c源代码
4星 · 超过85%的资源 需积分: 4 14 下载量 38 浏览量
2014-03-26
10:41:37
上传
评论
收藏 80KB DOC 举报
温馨提示
md5 h #ifndef MD5 H #define MD5 H #define R memset x y z memset x y z #define R memcpy x y z memcpy x y z #define R memcmp x y z memcmp x y z typedef unsigned long UINT4; typedef unsigned char POINTER;
资源推荐
资源详情
资源评论
md5 加密算法 c 实现
七分注释 收藏
经常到 csdn 来是查资料,每次都会有所收获。总是看别人的感觉很不好意思,于是决定自
己也写一点东西贡献出来。于是就有了这篇 md5 七分注释。希望对用到的朋友有所帮助。
记得当初自己刚开始学习 md5 的时候,从网上搜了很多关于算法的原理和文字性的描述的
东西,但是看了很久一直没有搞懂,搜 c 的源代码又很少。直到后来学习 rsa 算法的时候,
从网上下了 1991 年的欧洲的什么组织写的关于 rsa、des、md5 算法的 c 源代码(各部分代
码混在一块的,比如 rsa 用到的随机大素数就是用机器的随机时间的 md5 哈希值获得的)。
我才彻底把 md5 弄明白了。这里的代码就是我从那里面分离出来的,代码的效率和可重用
性都是很高的。整理了一下希望对需要的朋友能够有帮助。
md5 的介绍的文章网上很多,关于 md5 的来历,用途什么的这里就不再介绍了。这里主要
介绍代码。代码明白了就什么都明白了。
////////////////////////////////////////////////////////////////////
/* md5.h */
#ifndef _MD5_H_
#define _MD5_H_
#define R_memset(x, y, z) memset(x, y, z)
#define R_memcpy(x, y, z) memcpy(x, y, z)
#define R_memcmp(x, y, z) memcmp(x, y, z)
typedef unsigned long UINT4;
typedef unsigned char *POINTER;
/* MD5 context. */
typedef struct {
/* state (ABCD) */
/*四个 32bits 数,用于存放最终计算得到的消息摘要。当消息长度〉512bits 时,也用于存
放每个 512bits 的中间结果*/
UINT4 state[4];
/* number of bits, modulo 2^64 (lsb first) */
/*存储原始信息的 bits 数长度,不包括填充的 bits,最长为 2^64 bits,因为 2^64 是一个 64
位数的最大值*/
UINT4 count[2];
/* input buffer */
/*存放输入的信息的缓冲区,512bits*/
unsigned char buffer[64];
} MD5_CTX;
void MD5Init(MD5_CTX *);
void MD5Update(MD5_CTX *, unsigned char *, unsigned int);
void MD5Final(unsigned char [16], MD5_CTX *);
#endif /* _MD5_H_ */
///////////////////////////////////////////////////////////////////////////
/* md5.cpp */
#include "stdafx.h"
/* Constants for MD5Transform routine. */
/*md5 转换用到的常量,算法本身规定的*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform(UINT4 [4], unsigned char [64]);
static void Encode(unsigned char *, UINT4 *, unsigned int);
static void Decode(UINT4 *, unsigned char *, unsigned int);
/*
用于 bits 填充的缓冲区,为什么要 64 个字节呢?因为当欲加密的信息的 bits 数被 512 除其
余数为 448 时,
需要填充的 bits 的最大值为 512=64*8 。
*/
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
剩余9页未读,继续阅读
资源评论
- xujieli22014-07-06此源码不能通过基础C库类的编译,不过还是感谢分享!
- fukun5512014-12-10不错,能用,谢谢
- dahanxu19882014-07-15感谢分享,明白了MD5是怎么回事。
- csdn11111112015-04-07感谢分享,可以实现!!!
小提偶
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Python和MySQL的数据库管理系统.zip
- (源码)基于Python的通信系统误码率计算与可视化工具.zip
- (源码)基于Qt框架的海王网咖管理系统.zip
- (源码)基于Spring Boot和Material You设计语言的论坛管理系统.zip
- (源码)基于Nio的Mycat 2.0数据库代理系统.zip
- 通过go语言实现单例模式(Singleton Pattern).rar
- 通过python实现简单贪心算法示例.rar
- C语言中指针基本概念及应用详解
- (源码)基于Websocket和C++的咖啡机器人手臂控制系统.zip
- (源码)基于深度学习和LoRA技术的图书问答系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功