資源簡介
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界面
評論
共有 條評論