MD5.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef __MD5__
  2. #define __MD5__
  3. #pragma once
  4. //////////////////////////////////////////////////////////////////////////
  5. // MD5的Context结构体;
  6. typedef struct
  7. {
  8. // 状态 (ABCD);
  9. UINT32 state[4];
  10. // 2进制位个数, modulo 2^64 (lsb first);
  11. UINT32 count[2];
  12. // 输入的缓冲区;
  13. UINT8 buffer[64];
  14. } MD5_CTX;
  15. class __declspec(dllexport) CMD5
  16. {
  17. public:
  18. CMD5(void);
  19. CMD5(IN CONST BYTE* szInput,IN CONST size_t& nInputLen);
  20. ~CMD5(void);
  21. private:
  22. // md5核心算法;
  23. void MD5Init(IN MD5_CTX* md5ctx);
  24. void MD5Update(IN MD5_CTX* md5ctx, IN UINT8* Input, IN CONST size_t& InputLen);
  25. void MD5Transform(IN UINT32 state[4], IN UINT8 block[64] );
  26. void MD5Final(IN UINT8 digest[16], IN MD5_CTX* md5ctx);
  27. void Decode(IN UINT32 *output, IN UINT8 *input, IN CONST size_t& len);
  28. void Encode(IN UINT8 *output, IN UINT32 *input, IN CONST size_t& len);
  29. private:
  30. // md5封装;
  31. // 计算md5是否成功;
  32. BOOL m_bValidDigest;
  33. // md5计算后的结果值;
  34. UINT8 m_digest[16];
  35. // 将md5数值转化为16进制字符串;
  36. TCHAR m_digestStr[33];
  37. // 要计算的字符串;
  38. BYTE* m_pInputText;
  39. // 要计算的字符串长度;
  40. size_t m_nInputLen;
  41. // 计算出md5转化结果;
  42. BOOL CalcDigest();
  43. // 对外接口;
  44. public:
  45. void SetBYTEText(IN CONST BYTE* szInput,IN CONST size_t& nInputLen);
  46. CONST TCHAR* GetMD5Digest();
  47. };
  48. extern std::string GetTextMD5(std::string text);
  49. extern std::string GetFileMD5(std::string file);
  50. #endif