资源简介
md5加密算法 C语言(经过测试验证完整版)
经过调试验证,与工具结果一致
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
经过调试验证,与工具结果一致
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

代码片段和文件信息
#include
#include “md5.h“
unsigned char PADDING[]={0x80000000000000000
0000000000000000
0000000000000000
0000000000000000};
void MD5Init(MD5_CTX *context)
{
context->count[0] = 0;
context->count[1] = 0;
context->state[0] = 0x67452301;
context->state[1] = 0xEFCDAB89;
context->state[2] = 0x98BADCFE;
context->state[3] = 0x10325476;
}
void MD5Update(MD5_CTX *contextunsigned char *inputunsigned int inputlen)
{
unsigned int i = 0index = 0partlen = 0;
index = (context->count[0] >> 3) & 0x3F;
partlen = 64 - index;
context->count[0] += inputlen << 3;
if(context->count[0] < (inputlen << 3))
context->count[1]++;
context->count[1] += inputlen >> 29;
if(inputlen >= partlen)
{
memcpy(&context->buffer[index]inputpartlen);
MD5Transform(context->statecontext->buffer);
for(i = partlen;i+64 <= inputlen;i+=64)
MD5Transform(context->state&input[i]);
index = 0;
}
else
{
i = 0;
}
memcpy(&context->buffer[index]&input[i]inputlen-i);
}
void MD5Final(MD5_CTX *contextunsigned char digest[16])
{
unsigned int index = 0padlen = 0;
unsigned char bits[8];
index = (context->count[0] >> 3) & 0x3F;
padlen = (index < 56)?(56-index):(120-index);
MD5Encode(bitscontext->count8);
MD5Update(contextPADDINGpadlen);
MD5Update(contextbits8);
MD5Encode(digestcontext->state16);
}
void MD5Encode(unsigned char *outputunsigned int *inputunsigned int len)
{
unsigned int i = 0j = 0;
while(j < len)
{
output[j] = input[i] & 0xFF;
output[j+1] = (input[i] >> 8) & 0xFF;
output[j+2] = (input[i] >> 16) & 0xFF;
output[j+3] = (input[i] >> 24) & 0xFF;
i++;
j+=4;
}
}
void MD5Decode(unsigned int *outputunsigned char *inputunsigned int len)
{
unsigned int i = 0j = 0;
while(j < len)
{
output[i] = (input[j]) |
(input[j+1] << 8) |
(input[j+2] << 16) |
(input[j+3] << 24);
i++;
j+=4;
}
}
void MD5Transform(unsigned int state[4]unsigned char block[64])
{
unsigned int a = state[0];
unsigned int b = state[1];
unsigned int c = state[2];
unsigned int d = state[3];
unsigned int x[64];
MD5Decode(xblock64);
FF(a b c d x[ 0] 7 0xd76aa478); /* 1 */
FF(d a b c x[ 1] 12 0xe8c7b756); /* 2 */
FF(c d a b x[ 2] 17 0x242070db); /* 3 */
FF(b c d a x[ 3] 22 0xc1bdceee); /* 4 */
FF(a b c d x[ 4] 7 0xf57c0faf); /* 5 */
FF(d a b c x[ 5] 12 0x4787c62a); /* 6 */
FF(c d a b x[ 6] 17 0xa8304613); /
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5980 2014-02-23 23:04 src\md5.c
文件 1471 2016-11-15 20:38 src\md5.h
文件 599 2016-11-14 22:40 src\test.c
目录 0 2016-11-16 16:16 src
----------- --------- ---------- ----- ----
8050 4
- 上一篇:C++五子棋源码有AI,先手禁手
- 下一篇:c语言实现中缀表达式转后缀并求值
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论