C++ MD5的源码实例详解

2020-01-06 16:27:52王振洲

测试文件test.cpp:


#include "md5.h" 
#include <iostream> 
 
using namespace std; 
 
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(); 
} 
 
int main() { 
 
 cout << MD5("abc").toString() << endl; 
 cout << MD5(ifstream("D:test.txt")).toString() << endl; 
 cout << MD5(ifstream("D:test.exe", ios::binary)).toString() << endl; 
 cout << FileDigest("D:test.exe") << endl; 
 
 MD5 md5; 
 md5.update(""); 
 PrintMD5("", md5); 
 
 md5.update("a"); 
 PrintMD5("a", md5); 
 
 md5.update("bc"); 
 PrintMD5("abc", md5); 
 
 md5.update("defghijklmnopqrstuvwxyz"); 
 PrintMD5("abcdefghijklmnopqrstuvwxyz", md5); 
 
 md5.reset(); 
 md5.update("message digest"); 
 PrintMD5("message digest", md5); 
 
 md5.reset(); 
 md5.update(ifstream("D:test.txt")); 
 PrintMD5("D:test.txt", md5); 
 return 0; 
} 

类MD5封装了与MD5相关的操作,其有

4个构造函数:


MD5();          //默认构造函数
MD5(const void *input, size_t length);   //输入内存地址与长度信息的构造函数
MD5(const string &str);      //输入字符串的构造函数
MD5(ifstream &in);       //输入流的构造函数
3个Update函数:
void update(const void *input, size_t length); //往MD5对象内添加内存块
void update(const string &str);    //添加字符串
void update(ifstream &in);     //添加流

const byte* digest();       //计算MD5码,并返回指向它的指针
string toString();       //计算MD5,并返回其对应的字符串
void reset();        //重置,



test.cpp文件内的main函数描述了MD5类的用法。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到C++教程频道。