资源简介
MD5 C++实现代码,发现其他MD5注释不多,所以特意加了详细注释。
代码片段和文件信息
#include “MD5.h“
#include
// 旋转位数
#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
// ROTATE_LEFT rotates x left n bits
#define ROTATE_LEFT(x n) (((x) << (n)) | ((x) >> (32 - (n))))
// F G H and I are basic MD5 functions
#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)))
/* FF GG HH and II transformations for rounds 1 2 3 and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a b c d x r k) { \
(a) += F((b) (c) (d)) + (x) + (k); \
(a) = ROTATE_LEFT((a) (r)); \
(a) += (b); \
}
#define GG(a b c d x r k) { \
(a) += G((b) (c) (d)) + (x) + (k); \
(a) = ROTATE_LEFT((a) (r)); \
(a) += (b); \
}
#define HH(a b c d x r k) { \
(a) += H((b) (c) (d)) + (x) + k; \
(a) = ROTATE_LEFT((a) (r)); \
(a) += (b); \
}
#define II(a b c d x r k) { \
(a) += I((b) (c) (d)) + (x) + k; \
(a) = ROTATE_LEFT((a) (r)); \
(a) += (b); \
}
// 填充数据
static const unsigned char MD5_PADDING[64] = { 0x80 };
// 十六进制字符
static const char MD5_HEX[16] = {
‘0‘ ‘1‘ ‘2‘ ‘3‘ ‘4‘ ‘5‘ ‘6‘ ‘7‘
‘8‘ ‘9‘ ‘a‘ ‘b‘ ‘c‘ ‘d‘ ‘e‘ ‘f‘
};
// 每轮变换函数中用到的常量,这些常量值是根据以下伪代码所得:
// k[64]
// for i from 0 to 63
// k[i] := floor(abs(sin(i + 1)) × 2^32)
// 注:sin中的变量是以弧度为单位
static const DWORD MD5_CONSTANTS[64] =
{
0xd76aa478 0xe8c7b756 0x242070db 0xc1bdceee // 1 ~ 4
0xf57c0faf 0x4787c62a 0xa8304613 0xfd469501 // 5 ~ 8
0x698098d8 0x8b44f7af 0xffff5bb1 0x895cd7be // 9 ~ 12
0x6b901122 0xfd987193 0xa679438e 0x49b40821 // 13 ~ 16
0xf61e2562 0xc040b340 0x265e5a51 0xe9b6c7aa // 17 ~ 20
0xd62f105d 0x2441453 0xd8a1e681 0xe7d3fbc8 // 21 ~ 24
0x21e1cde6 0xc33707d6 0xf4d50d87 0x455a14ed // 25 ~ 28
0xa9e3e905 0xfcefa3f8 0x676f02d9 0x8d2a4c8a // 29 ~ 32
0xfffa3942 0x8771f681 0x6d9d6122 0xfde5380c // 33 ~ 36
0xa4beea44 0x4bdecfa9 0xf6bb4b60 0xbebfbc70 // 37 ~ 40
0x289b7ec6 0xeaa127fa 0xd4ef3085 0x4881d05 // 41 ~ 44
0xd9d4d039 0xe6db99e5 0x1fa27cf8 0xc4ac5665 // 45 ~ 48
0xf4292244 0x432aff97 0xab9423a7 0xfc93a039 // 49 ~ 52
0x655b59c3 0x8f0ccc92 0xffeff47d 0x85845dd1 // 53 ~ 56
0x6fa87e4f 0xfe2ce6e0 0xa3014314 0x4e0811a1 // 57 ~ 60
0xf7537e82 0xbd3af235 0x2ad7d2bb 0xeb86d391 // 61 ~ 64
};
// MD5初始state值
static const DWORD MD5_ORIGINAL_STATE[4] =
{
0x67452301 0xEFCDAB89 0x98BADCFE 0x10325476
};
static const int MD5_BUFSIZE = 1024;
CMD5::CMD5()
{
Init();
}
CMD5::CMD5( const unsigned char *input unsigned int len )
{
Init();
Update(input len);
}
CMD5::CMD5( const std::string &msg )
{
Init();
Update(msg);
}
CM
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1577 2012-06-22 21:47 MD5.h
文件 872 2012-06-22 12:06 MD5.sln
文件 4016 2012-06-22 12:58 MD5.vcxproj
文件 80 2012-06-22 21:40 MD5Test.txt
文件 1564 2012-06-22 21:57 Test.cpp
文件 10441 2012-06-22 21:55 MD5.cpp
- 上一篇:RGB与HSI空间相互转化 C++
- 下一篇:C++实现银行储蓄系统 MFC界面
相关资源
- 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
- c语言 SHA1 DES MD4 MD5
- c++ MD5加密 mfc
- 编程实现SHA1/MD5杂凑密码算法,sha1程
- MD5加解密算法C语言
- MD4演示+有界面+可加密文字,文件,十
- MD5 SHA1 SHA256 的C语言源码
评论
共有 条评论