⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zmd5.h

📁 本软件采用MD5算法生成消息摘要,并且具有针对自然攻击的计算检测错误率的功能
💻 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 + -