From d430259352600224cc5c9f41acb75ce4b183ab3f Mon Sep 17 00:00:00 2001 From: Tyrone Date: Wed, 19 Sep 2012 20:03:53 +0800 Subject: [PATCH] improve md5 --- base/handle-base.h | 4 +- md5.cpp => encrypt/md5.cpp | 0 encrypt/md5.h | 91 +++++++++++++++++++++++++++++ ult-md5.h => encrypt/ult-md5.h | 16 +++-- md5.h | 103 +++++---------------------------- 5 files changed, 113 insertions(+), 101 deletions(-) rename md5.cpp => encrypt/md5.cpp (100%) create mode 100644 encrypt/md5.h rename ult-md5.h => encrypt/ult-md5.h (82%) diff --git a/base/handle-base.h b/base/handle-base.h index 461b216..62af16f 100644 --- a/base/handle-base.h +++ b/base/handle-base.h @@ -4,8 +4,8 @@ ** author ** taoabc@gmail.com */ -#ifndef ULT_HANDLE_BASE_H_ -#define ULT_HANDLE_BASE_H_ +#ifndef ULT_BASE_HANDLEBASE_H_ +#define ULT_BASE_HANDLEBASE_H_ namespace ult { diff --git a/md5.cpp b/encrypt/md5.cpp similarity index 100% rename from md5.cpp rename to encrypt/md5.cpp diff --git a/encrypt/md5.h b/encrypt/md5.h new file mode 100644 index 0000000..698c995 --- /dev/null +++ b/encrypt/md5.h @@ -0,0 +1,91 @@ +/* + Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + L. Peter Deutsch + ghost@aladdin.com + + */ +/* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */ +/* + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.h is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2002-04-13 lpd Removed support for non-ANSI compilers; removed + references to Ghostscript; clarified derivation from RFC 1321; + now handles byte order either statically or dynamically. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); + added conditionalization for C++ compilation from Martin + Purschke . + 1999-05-03 lpd Original version. + */ + +#ifndef md5_INCLUDED +# define md5_INCLUDED + +/* + * This package supports both compile-time and run-time determination of CPU + * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be + * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is + * defined as non-zero, the code will be compiled to run only on big-endian + * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to + * run on either big- or little-endian CPUs, but will run slightly less + * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. + */ + +typedef unsigned char md5_byte_t; /* 8-bit byte */ +typedef unsigned int md5_word_t; /* 32-bit word */ + +/* Define the state of the MD5 Algorithm. */ +typedef struct md5_state_s { + md5_word_t count[2]; /* message length in bits, lsw first */ + md5_word_t abcd[4]; /* digest buffer */ + md5_byte_t buf[64]; /* accumulate block */ +} md5_state_t; + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Initialize the algorithm. */ +void md5_init(md5_state_t *pms); + +/* Append a string to the message. */ +void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); + +/* Finish the message and return the digest. */ +void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); + +#ifdef __cplusplus +} /* end extern "C" */ +#endif + +#endif /* md5_INCLUDED */ diff --git a/ult-md5.h b/encrypt/ult-md5.h similarity index 82% rename from ult-md5.h rename to encrypt/ult-md5.h index c193c43..f0ae1c9 100644 --- a/ult-md5.h +++ b/encrypt/ult-md5.h @@ -6,19 +6,18 @@ ** modify md5.c to md5.cpp ** add include stdafx.h, change #include to */ -#ifndef ULT_MD5_H_ -#define ULT_MD5_H_ +#ifndef ULT_ENCRYPT_ULTMD5_H_ +#define ULT_ENCRYPT_ULTMD5_H_ -#include "md5.h" +#include "./md5.h" #include #include namespace ult { -const int kBufferSize = 1024; +static const int kBufferSize = 1024; -inline std::string MD5String( const std::string& str ) -{ +inline std::string MD5String(const std::string& str) { md5_state_s state; md5_byte_t digest[16]; char hex_output[16*2 + 1]; @@ -32,8 +31,7 @@ inline std::string MD5String( const std::string& str ) return hex_output; } -inline std::string MD5File( const std::wstring& file_name ) -{ +inline std::string MD5File(const std::wstring& file_name) { HANDLE hfile = CreateFile(file_name.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hfile) { @@ -57,6 +55,6 @@ inline std::string MD5File( const std::wstring& file_name ) } return hex_output; } -} +} //namespace ult #endif \ No newline at end of file diff --git a/md5.h b/md5.h index 698c995..4975eb4 100644 --- a/md5.h +++ b/md5.h @@ -1,91 +1,14 @@ /* - Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - L. Peter Deutsch - ghost@aladdin.com - - */ -/* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */ -/* - Independent implementation of MD5 (RFC 1321). - - This code implements the MD5 Algorithm defined in RFC 1321, whose - text is available at - http://www.ietf.org/rfc/rfc1321.txt - The code is derived from the text of the RFC, including the test suite - (section A.5) but excluding the rest of Appendix A. It does not include - any code or documentation that is identified in the RFC as being - copyrighted. - - The original and principal author of md5.h is L. Peter Deutsch - . Other authors are noted in the change history - that follows (in reverse chronological order): - - 2002-04-13 lpd Removed support for non-ANSI compilers; removed - references to Ghostscript; clarified derivation from RFC 1321; - now handles byte order either statically or dynamically. - 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. - 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); - added conditionalization for C++ compilation from Martin - Purschke . - 1999-05-03 lpd Original version. - */ - -#ifndef md5_INCLUDED -# define md5_INCLUDED - -/* - * This package supports both compile-time and run-time determination of CPU - * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be - * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is - * defined as non-zero, the code will be compiled to run only on big-endian - * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to - * run on either big- or little-endian CPUs, but will run slightly less - * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. - */ - -typedef unsigned char md5_byte_t; /* 8-bit byte */ -typedef unsigned int md5_word_t; /* 32-bit word */ - -/* Define the state of the MD5 Algorithm. */ -typedef struct md5_state_s { - md5_word_t count[2]; /* message length in bits, lsw first */ - md5_word_t abcd[4]; /* digest buffer */ - md5_byte_t buf[64]; /* accumulate block */ -} md5_state_t; - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Initialize the algorithm. */ -void md5_init(md5_state_t *pms); - -/* Append a string to the message. */ -void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); - -/* Finish the message and return the digest. */ -void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); - -#ifdef __cplusplus -} /* end extern "C" */ -#endif - -#endif /* md5_INCLUDED */ +** md5封装头文件 +** 该头文件不是一个头文件实现 +** 工程中需要计算MD5的地方必须包含以下文件 +** ./encrypt/md5/md5.cpp +** author +** taoabc@gmail.com +*/ +#ifndef ULT_MD5_H_ +#define ULT_MD5_H_ + +#include "./encrypt/ult-md5.h" + +#endif \ No newline at end of file