MD5.h 1.2 KB

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