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

📄 md5.cpp

📁 用MD5加密文件信息
💻 CPP
字号:
#include<iostream>
#include<string>
#include<fstream>
#include<stdio.h>
#include "md5.h"
void
PrintMD5(const string & str, MD5 & md5)
{
        cout << "MD5(\"" << str << "\") = " << md5.toString() << endl;
}


string FileDigest(const string & file)
{

        ifstream in(file.c_str(), ios::binary);
        if (!in)
                return "";

        MD5 md5;
        std::streamsize length;
        char buffer[1024];
        while (!in.eof()) {
                in.read(buffer, 1024);
                length = in.gcount();
                if (length > 0)
                        md5.update(buffer, length);
        }
        in.close();
        return md5.toString();
}





void main()
{     
	   MD5  A,B,C;
       int strlen=0;
	   ofstream outfile("result.txt"),outfile2("result2.txt"),outfile3("result3.txt");
       FILE *ft[3]={fopen("result.txt","wt"),fopen("result2.txt","wt"),fopen("result3.txt","wt")};//返回文件指针
	   ifstream  infile("a.txt");
	    FILE *fr=fopen("a.txt","rt");// 读数据
	   FILE *fp[3]={fopen("temp1.txt","wt"),fopen("temp2.txt","wt"),fopen("temp3.txt","wt")};//写数据	
       
	   string  d;
	   while(getline(infile,d))//d
	   {
		   strlen+=d.size()+1;
	   }
	   cout<<"The length of a.txt is:"<<endl;
	   cout<<strlen<<endl;
	    infile.seekg(ios::beg);//重定位文件头
        char *buf = new char[129];//
    	char *buf1=new char[9];
	   uint32 statemp[4];
        for ( int i = 0; i < 3; i++)//将文本中的内容分为三部分
		{
			 memset(buf,0,128);
			
			 if(i==0)
			 {
				  fread(buf,128,1,fr);//将a.txt的数据读到buf中
			      fwrite(buf,128,1,fp[i]);
				  fclose(fp[i]);
			 outfile2<<FileDigest("temp1.txt");//读入result2
			 outfile3<<FileDigest("temp1.txt");//读入result3
                for(int j=0;j<4;j++)
				{ 
				  memset(buf1,0,8);//清空buf1
				 fread(&statemp[j],8,1,ft[i]);
				}
				B._state[0]=B._state[0]+statemp[0];
				B._state[1]=B._state[1]+statemp[1];
				B._state[2]=B._state[2]+statemp[2];
				B._state[3]=B._state[3]+statemp[3];

		    	C._state[0]=C._state[0]+statemp[0];
				C._state[1]=C._state[1]+statemp[1];
				C._state[2]=C._state[2]+statemp[2];
				C._state[3]=C._state[3]+statemp[3];			  

		}


         if(i==1)
			 {
				  fread(buf,128,1,fr);//将fr所指文件中的数据读到buf中
			      fwrite(buf,128,1,fp[i]);
				  fclose(fp[i]);
				  outfile<<FileDigest("temp2.txt");
			      outfile2<<FileDigest("temp2.txt");
                  
				  for(int j=0;j<4;j++)
				{ 
				  memset(buf1,0,8);
				  fread(&statemp[j],8,1,ft[i]);
				}
				A._state[0]=A._state[0]+statemp[0];
				A._state[1]=A._state[1]+statemp[1];
				A._state[2]=A._state[2]+statemp[2];
				A._state[3]=A._state[3]+statemp[3];

		    	B._state[0]=B._state[0]+statemp[0];
				B._state[1]=B._state[1]+statemp[1];
				B._state[2]=B._state[2]+statemp[2];
				B._state[3]=B._state[3]+statemp[3];	

			 }

			 if(i==2)
			  {   char *buf = new char[strlen+2-2*128];
				  fread(buf,strlen-2*128,1,fr);
                  fwrite(buf,strlen-2*128,1,fp[i]); 
				  fclose(fp[i]);
				  outfile<<FileDigest("temp3.txt");
			      outfile3<<FileDigest("temp3.txt");

				  for(int j=0;j<4;j++)
				{ 
				  memset(buf1,0,8);
				  fread(&statemp[j],8,1,ft[i]);
				}
				A._state[0]=A._state[0]+statemp[0];
				A._state[1]=A._state[1]+statemp[1];
				A._state[2]=A._state[2]+statemp[2];
				A._state[3]=A._state[3]+statemp[3];

		    	C._state[0]=C._state[0]+statemp[0];
				C._state[1]=C._state[1]+statemp[1];
				C._state[2]=C._state[2]+statemp[2];
				C._state[3]=C._state[3]+statemp[3];			

			  }
             
              fclose(ft[i]);
		}

        infile.close();
        outfile.close();
		outfile2.close();
		outfile3.close();
        delete[] buf;
		delete[] buf1;
   cout<<"数据块temp1的MD5="<<FileDigest("temp1.txt")<<endl<<"数据块temp2的MD5="
	   <<FileDigest("temp2.txt")<<endl<<"数据块temp3的MD5="<<FileDigest("temp3.txt")
	   <<endl<<"*****************************************************"<<endl
       <<"temp2和temp3组合的MD5="<<FileDigest("result.txt")<<endl<<"temp1和temp2组合的MD5="
	   <<FileDigest("result2.txt")<<endl<<"temp1和temp3组合的MD5="<<FileDigest("result3.txt")<<endl;
       
		cout<<endl;
		cout<<"*****************************************************"<<endl;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -