资源简介
MD5算法的C++实现的代码,提供给需要的同学,主要的目的方便自己逆向工程的时候要用到,方便查找。
代码片段和文件信息
#include “stdafx.h“
unsigned char PADDING[] = {
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 };
//在逆向代码的时候,需要关注下面的特征值
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 *context unsigned char *input unsigned int inputlen)
{
unsigned int i = 0 index = 0 partlen = 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] input partlen);
MD5Transform(context->state context->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 *context unsigned char digest[16])
{
unsigned int index = 0 padlen = 0;
unsigned char bits[8];
index = (context->count[0] >> 3) & 0x3F;
padlen = (index < 56) ? (56 - index) : (120 - index);
MD5Encode(bits context->count 8);
MD5Update(context PADDING padlen);
MD5Update(context bits 8);
MD5Encode(digest context->state 16);
}
void MD5Encode(unsigned char *output unsigned int *input unsigned int len)
{
unsigned int i = 0 j = 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 *output unsigned char *input unsigned int len)
{
unsigned int i = 0 j = 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(x block 64);
FF(a b c d x[0] 7 0xd76aa478);
FF(d a b c x[1] 12 0xe8c7b756);
FF(c d a b x[2] 17 0x242070db);
FF(b c d a x[3] 22 0xc1bdceee);
FF(a b c d x[4] 7 0xf57c0faf);
FF(d a b c x[5] 12 0x4787c62a);
FF(c d a b x[6] 17 0xa8304613);
FF(b c d a x[7] 22 0xfd469501);
FF(a b c d x[8] 7 0x698098d8);
FF(d a b c x[9] 12 0x8b44f7af);
FF(c d a b x[10] 17 0xffff5bb1);
FF(b c d a x[11] 22 0x895cd7be);
FF(a b c d x[12] 7 0x6b901122);
FF(d a b c x[13] 12 0xfd987193);
FF(c d a b x[14] 17 0xa679438e);
FF(b
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-08-27 11:09 Md5Demo\
目录 0 2016-08-27 10:01 Md5Demo\.git\
文件 2581 2016-08-27 10:01 Md5Demo\.gitattributes
文件 2389 2016-08-27 10:01 Md5Demo\.gitignore
文件 643 2016-08-27 10:01 Md5Demo\.git\config
文件 73 2016-08-27 10:01 Md5Demo\.git\desc
文件 23 2016-08-27 10:01 Md5Demo\.git\HEAD
目录 0 2016-08-27 10:01 Md5Demo\.git\hooks\
文件 177 2016-08-27 10:01 Md5Demo\.git\hooks\README.sample
文件 192 2016-08-27 10:01 Md5Demo\.git\index
目录 0 2016-08-27 10:01 Md5Demo\.git\info\
文件 113 2016-08-27 10:01 Md5Demo\.git\info\exclude
文件 651 2016-08-27 10:05 Md5Demo\.git\ms-persist.xm
目录 0 2016-08-27 10:01 Md5Demo\.git\ob
目录 0 2016-08-27 10:01 Md5Demo\.git\ob
文件 1169 2016-08-27 10:01 Md5Demo\.git\ob
目录 0 2016-08-27 10:01 Md5Demo\.git\ob
文件 751 2016-08-27 10:01 Md5Demo\.git\ob
目录 0 2016-08-27 10:01 Md5Demo\.git\ob
目录 0 2016-08-27 10:01 Md5Demo\.git\ob
目录 0 2016-08-27 10:01 Md5Demo\.git\refs\
目录 0 2016-08-27 10:01 Md5Demo\.git\refs\heads\
目录 0 2016-08-27 10:01 Md5Demo\.git\refs\tags\
目录 0 2016-08-27 10:27 Md5Demo\Debug\
文件 38912 2016-08-27 11:09 Md5Demo\Debug\Md5Demo.exe
文件 251164 2016-08-27 11:09 Md5Demo\Debug\Md5Demo.ilk
文件 527360 2016-08-27 11:09 Md5Demo\Debug\Md5Demo.pdb
目录 0 2016-08-27 10:01 Md5Demo\ipch\
目录 0 2016-08-27 10:56 Md5Demo\ipch\md5demo-875c03cc\
文件 3342336 2016-08-27 10:56 Md5Demo\ipch\md5demo-875c03cc\md5demo-737d68b7.ipch
目录 0 2016-08-27 10:53 Md5Demo\Md5Demo\
............此处省略29个文件信息
- 上一篇:八数码问题的八种实现方法
- 下一篇:VC/MFC多页浏览器源代码
相关资源
- 标准的MD5源码md5.cmd5.h使用说明文件
- MD5算法源代码(MFC)
- vc++ MD5算法源码
- 文件MD5查看器(VC++MFC)源代码
- VC6.0 C++ MD5验证源码文件和字符串验证
- 获取进程信息和计算进程文件的MD5码
- MFC vc6.0 RSA DES MD5 加密解密算法
- MD5 摘要算法C语言实现
- ASP版hmac和md5加密函数,支持中文,带
- MFC实现MD5值生成工具文件和字符串都
- HMAC-MD5 C语言算法
- MD5 碰撞生成器 C++源码
- 常用加密算法AES、RSA、DES、MD5、TEA、
- MD5 C++实现代码,带注释
- C语言 3DES、AES、RC6、TEA、RSA、MD5、S
- MD5-SHA1-SHA256算法C源码
- md5加密算法 C语言经过测试验证完整版
- 趣味编程.pdf
- MFC 计算文件MD5码 VC++
- c语言实现获取文件的md5哈希值
- MD5算法c++程序设计实现
- MD5 C++实现 对文件计算MD5值
- C语言版本Linux环境下MD5加密函数
- vc 源码 md5字符串加密算法 绝对可以用
- 文件MD5查看器工具软件
- VS2010 MFC 选择并获得文件的MD5
- C++ 使用MD5算法对密码进行加密
- C语言计算文件的md5值(长度32)
- MD5加密算法C++实现
- C++ HMAC SHA1
评论
共有 条评论