需要安装openssl的库
- sudo apt-get install openssl
- sudo apt-get install libssl-dev
- 参考链接
代码
#include "openssl/md5.h"
#include <iostream>
#include <fstream>
#include <iomanip>
//#define MAX_DATA_BUFF = 1024;
//#define MD5_LENGTH = 16
char* get_file_md5(const char * path){
char *out = (char *)malloc(33); //输出
std::ifstream file(path,std::ios::in|std::ios::binary);//打开文件
unsigned char MD5_result[16];
do {
if(file.fail()){
std::cout<<"open file failure!"<<std::endl;
break;
}
MD5_CTX md5_ctx;
MD5_Init(&md5_ctx);
char data_Buff[1024];
while (!file.eof()){
file.read(data_Buff,1024);//读取文件
int length = file.gcount();
if (length){
MD5_Update(&md5_ctx,data_Buff,length);//将当前文件加入并且更新MD5
}
}
MD5_Final(MD5_result,&md5_ctx); //获取MD5
for (int i = 0; i < 16; i++) { //将md5以16进制输出
snprintf(&(out[i*2]),16*2,"%02x",(unsigned int)MD5_result[i]);
}
}while (false);
return out;
}
调用简单流程
char *output = get_file_md5(original_backup_file.c_str());//original_backup_file为文件的名字
std::cout << "md5:%s\n"<< output << std::endl;
free(output);
测试MD5的简单用例
// std::ostringstream sout;
// sout << std::hex<<std::setfill('0');
// for(long long c:md5){
// sout << std::setw(2) << (long long )c;
// }
// char mdString[33];
// for(int i = 0; i < 16; i++)
// sprintf(&mdString[i*2], "%02x", (unsigned int)md5[i]);
//
// std::cout << mdString << std::endl;