#ifndef __MD5__ #define __MD5__ #pragma once ////////////////////////////////////////////////////////////////////////// // MD5的Context结构体; typedef struct { // 状态 (ABCD); UINT32 state[4]; // 2进制位个数, modulo 2^64 (lsb first); UINT32 count[2]; // 输入的缓冲区; UINT8 buffer[64]; } MD5_CTX; class __declspec(dllexport) CMD5 { public: CMD5(void); CMD5(IN CONST BYTE* szInput,IN CONST size_t& nInputLen); ~CMD5(void); private: // md5核心算法; void MD5Init(IN MD5_CTX* md5ctx); void MD5Update(IN MD5_CTX* md5ctx, IN UINT8* Input, IN CONST size_t& InputLen); void MD5Transform(IN UINT32 state[4], IN UINT8 block[64] ); void MD5Final(IN UINT8 digest[16], IN MD5_CTX* md5ctx); void Decode(IN UINT32 *output, IN UINT8 *input, IN CONST size_t& len); void Encode(IN UINT8 *output, IN UINT32 *input, IN CONST size_t& len); private: // md5封装; // 计算md5是否成功; BOOL m_bValidDigest; // md5计算后的结果值; UINT8 m_digest[16]; // 将md5数值转化为16进制字符串; TCHAR m_digestStr[33]; // 要计算的字符串; BYTE* m_pInputText; // 要计算的字符串长度; size_t m_nInputLen; // 计算出md5转化结果; BOOL CalcDigest(); // 对外接口; public: void SetBYTEText(IN CONST BYTE* szInput,IN CONST size_t& nInputLen); CONST TCHAR* GetMD5Digest(); }; extern std::string GetTextMD5(std::string text); extern std::string GetFileMD5(std::string file); #endif