📄 zmd5.h
字号:
/*使用说明:
这个类是一个虚基类,要使用这个类必须继承自这个类,并实现这个类里的
virtual void OnProcessing(int PrcessNum)=0;纯虚函数,这个纯虚函数
用于在对一个较大文件进行MD5计算时,将处理进度返回给用户*/
#ifndef _ZMD5
#define _ZMD5
#define for if(0); else for
//读取文件的缓冲区,这个值必须是64的整数倍
#define FILE_BUFFER_READ 1048576
#include <io.h>
#include <string>
using namespace std;
class ZMD5
{
public:
ZMD5();
virtual ~ZMD5();
private:
//四个寄存器具变量
unsigned int A,B,C,D;
//常量
int S11, S21, S31, S41;
int S12, S22, S32, S42;
int S13, S23, S33, S43;
int S14, S24, S34, S44;
//对原始信息需要追加的字节数
int m_AppendByte;
//原始信息长度,用一个64位整数记录
unsigned char m_MsgLen[8];
private:
//位移函数
unsigned int ROTATE_LEFT(unsigned int x,unsigned int n);
unsigned int F(unsigned int x,unsigned int y,unsigned int z);
unsigned int G(unsigned int x,unsigned int y,unsigned int z);
unsigned int H(unsigned int x,unsigned int y,unsigned int z);
unsigned int I(unsigned int x,unsigned int y,unsigned int z);
//四轮变换函数
void FF(unsigned int& a,unsigned int b,unsigned int c,unsigned int d,unsigned int x,int s,unsigned int ac);
void GG(unsigned int& a,unsigned int b,unsigned int c,unsigned int d,unsigned int x,int s,unsigned int ac);
void HH(unsigned int& a,unsigned int b,unsigned int c,unsigned int d,unsigned int x,int s,unsigned int ac);
void II(unsigned int& a,unsigned int b,unsigned int c,unsigned int d,unsigned int x,int s,unsigned int ac);
//初始化MD5所需参数
void Init();
//计算追加字节数及记录原始信息长度
void Append(unsigned int MsgLen);
//将原始信息以64字节进行分组,进行错位打乱
void Transform(unsigned char Block[64]);
//将寄存器A,B,C,D中最后保存的值转换为十六进制并返回给用户
string ToHex(bool UpperCase);
public:
//计算字符串的MD5
string GetMD5OfString(string InputMessage,bool UpperCase);
private:
//文件指针,声明在此处是因为有必要在函数外部关闭文件指针
FILE* m_pFile;
//文件的打开状态,GetMD5OfFile函数根据此值决定是否继续计算
bool m_FileOpen;
public:
//计算文件的MD5
string GetMD5OfFile(const string FileName,bool UpperCase);
//允许用户从函数外部提前结束对GetMD5OfFile的调用
void GetMD5OfFile_Terminate();
private:
//纯虚函数,在计算文件MD5的过程中,通过PrcessNum将处理进度传递到子类中
virtual void OnProcessing(int PrcessNum)=0;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -