需要安装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); //获取MD5for (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;
参考链接
- OpenSSL - 文件和字符MD5加密实现
- MD5验证文件完整性 C++
- How to create a md5 hash of a string in C?