md5.h
上传用户:xiuanze55
上传日期:2017-08-03
资源大小:1080k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. /////////////////////////////////////////////////////////////////////////
  2. // MD5.cpp
  3. // Implementation file for MD5 class
  4. //
  5. // This C++ Class implementation of the original RSA Data Security, Inc.
  6. // MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle.
  7. // All rights reserved.  This software is a derivative of the "RSA Data
  8. //  Security, Inc. MD5 Message-Digest Algorithm"
  9. //
  10. // You may use this software free of any charge, but without any
  11. // warranty or implied warranty, provided that you follow the terms
  12. // of the original RSA copyright, listed below.
  13. //
  14. // Original RSA Data Security, Inc. Copyright notice
  15. /////////////////////////////////////////////////////////////////////////
  16. //
  17. // Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
  18. // rights reserved.
  19. //
  20. // License to copy and use this software is granted provided that it
  21. // is identified as the "RSA Data Security, Inc. MD5 Message-Digest
  22. // Algorithm" in all material mentioning or referencing this software
  23. // or this function.
  24. // License is also granted to make and use derivative works provided
  25. // that such works are identified as "derived from the RSA Data
  26. // Security, Inc. MD5 Message-Digest Algorithm" in all material
  27. // mentioning or referencing the derived work.
  28. // RSA Data Security, Inc. makes no representations concerning either
  29. // the merchantability of this software or the suitability of this
  30. // software for any particular purpose. It is provided "as is"
  31. // without express or implied warranty of any kind.
  32. // These notices must be retained in any copies of any part of this
  33. // documentation and/or software.
  34. /////////////////////////////////////////////////////////////////////////
  35. typedef unsigned       int uint4;
  36. typedef unsigned short int uint2;
  37. typedef unsigned      char uchar;
  38. char* PrintMD5(uchar md5Digest[16]);
  39. char* MD5String(char* szString);
  40. char* MD5File(char* szFilename);
  41. class md5
  42. {
  43. // Methods
  44. public:
  45. md5() { Init(); }
  46. void Init();
  47. void Update(uchar* chInput, uint4 nInputLen);
  48. void Finalize();
  49. uchar* Digest() { return m_Digest; }
  50. private:
  51. void Transform(uchar* block);
  52. void Encode(uchar* dest, uint4* src, uint4 nLength);
  53. void Decode(uint4* dest, uchar* src, uint4 nLength);
  54. inline uint4 rotate_left(uint4 x, uint4 n)
  55.                  { return ((x << n) | (x >> (32-n))); }
  56. inline uint4 F(uint4 x, uint4 y, uint4 z)
  57.                  { return ((x & y) | (~x & z)); }
  58. inline  uint4 G(uint4 x, uint4 y, uint4 z)
  59.                  { return ((x & z) | (y & ~z)); }
  60. inline  uint4 H(uint4 x, uint4 y, uint4 z)
  61.                  { return (x ^ y ^ z); }
  62. inline  uint4 I(uint4 x, uint4 y, uint4 z)
  63.                  { return (y ^ (x | ~z)); }
  64. inline void FF(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
  65.                  { a += F(b, c, d) + x + ac; a = rotate_left(a, s); a += b; }
  66. inline void GG(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
  67.                      { a += G(b, c, d) + x + ac; a = rotate_left(a, s); a += b; }
  68. inline void HH(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
  69.                      { a += H(b, c, d) + x + ac; a = rotate_left(a, s); a += b; }
  70. inline void II(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
  71.                      { a += I(b, c, d) + x + ac; a = rotate_left(a, s); a += b; }
  72. // Data
  73. private:
  74. uint4 m_State[4];
  75. uint4 m_Count[2];
  76. uchar m_Buffer[64];
  77. uchar m_Digest[16];
  78. uchar m_Finalized;
  79. };