资源简介
MD5的c++算法,在vc6.0 和vs2010 上测试都正常,绝对可以用
代码片段和文件信息
#include “md5.h“
#include “stdio.h“
#include “memory.h“
#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 (UINT32 a[4] unsigned char b[64]);
static void Encode (unsigned char * UINT32 * unsigned int);
static void Decode (UINT32 * unsigned char * unsigned int);
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
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
};
#define F(x y z) (((x) & (y)) | ((~x) & (z)))
#define G(x y z) (((x) & (z)) | ((y) & (~z)))
#define H(x y z) ((x) ^ (y) ^ (z))
#define I(x y z) ((y) ^ ((x) | (~z)))
#define ROTATE_LEFT(x n) (((x) << (n)) | ((x) >> (32-(n))))
#define FF(a b c d x s ac) { \
(a) += F ((b) (c) (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a) (s)); \
(a) += (b); \
}
#define GG(a b c d x s ac) { \
(a) += G ((b) (c) (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a) (s)); \
(a) += (b); \
}
#define HH(a b c d x s ac) { \
(a) += H ((b) (c) (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a) (s)); \
(a) += (b); \
}
#define II(a b c d x s ac) { \
(a) += I ((b) (c) (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a) (s)); \
(a) += (b); \
}
void MD5Init (MD5_CTX *context)
{
context->count[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 *context unsigned char *input unsigned int inputLen)
{
unsigned int i index partLen;
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
if ((context->count[0] += ((UINT32)inputLen << 3))
< ((UINT32)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT32)inputLen >> 29);
partLen = 64 - index;
if (inputLen >= partLen) {
memcpy((unsigned char *)&context->buffer[index] (unsigned char *)input partLen);
MD5Transform (context->state context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state &input[i]);
index = 0;
}
else
i = 0;
memcpy((unsigned char *)&context->buffer[index] (unsigned char *)&input[i]
inputLen-i);
}
void MD5Final (unsigned char digest[16] MD5_CTX * context)
{
unsigned char bits[8];
unsigned int index padLen;
Encode (bits context->count 8);
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context PADDING padLen);
MD5Update (context bits 8);
Encode (digest context->state 16);
memset ((unsigned char *)context 0 si
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7944 2012-03-16 21:02 md5.cpp
文件 494 2012-03-16 20:59 md5.h
----------- --------- ---------- ----- ----
8438 2
- 上一篇:C语言实现控制台扫雷小游戏
- 下一篇:各种排序算法的实现和性能比较C程序源代码
相关资源
- 学生考勤管理系统源码
- VC++ DES 加密解密算法
- C语言实现的倒排索引算法(含全部源
- 文件MD5查看器工具软件
- Zip和Unzip源码
- DES加密算法C++类
- 基于VC++的 IEC60870-103 电力规约 源码
- Hill密码加密算法的C++实现Hill密码解密
- VS2010 MFC 选择并获得文件的MD5
- 节点大小平衡树(Size Balanced Tree c++和
- 纯C语言写计算器界面源码
- 密码学MFC实现仿射加密解密超级计算
- modbus完整协议源码c/c++
- C++网络蜘蛛源码VS开发平台
- usb_hid_vc++6.0读写设备源码
- 换肤窗口VC++程序与源码
- 非常好用的c++ ftp库源码vs2013工程
- linux下C语言实现FTP上传文件源码200行
- AES加密源码使用C++实现
- 采用MFC编写的文件加密解密程序
- c++ 本地代理服务器源码
- DOS操作系统的C语言源代码
- A*算法、自动寻路算法C++源码
- AES算法源码~~~~~~~~~~~~
- mfc的ftp客户端源码
- zw_基于Ribbon界面的图书管理系统—w
- zw_记事本源码c++.zip
- zw_AES加密算法c语言实现代码.zip
- linux下C语言从N模数、E公钥指数、D私
- MFC有界面RSA加密解密算法实现
评论
共有 条评论