?? 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 + -