• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签: MD5  

资源简介

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

评论

共有 条评论