当前在linux系统下,shell命令可以获取md5值,如下:
如果进行c++编程,在代码里执行shell命令可以获得,但是很不雅观,特别是了解了system或者popen函数的机制之后。现在介绍使用openssl的md5函数生成文件md5:
#include <fstream> #include <openssl/md5.h> #include <string> using std::string; int get_file_md5(const std::string &file_name, std::string &md5_value) { md5_value.clear(); std::ifstream file(file_name.c_str(), std::ifstream::binary); if (!file) { return -1; } MD5_CTX md5Context; MD5_Init(&md5Context); char buf[1024 * 16]; while (file.good()) { file.read(buf, sizeof(buf)); MD5_Update(&md5Context, buf, file.gcount()); } unsigned char result[MD5_DIGEST_LENGTH]; MD5_Final(result, &md5Context); char hex[35]; memset(hex, 0, sizeof(hex)); for (int i = 0; i < MD5_DIGEST_LENGTH; ++i) { sprintf(hex + i * 2, "%02x", result[i]); } hex[32] = '\0'; md5_value = string(hex); return 0; } int main(int argc, char* argv[]) { string file_name = "/home/dev/test.txt"; string md5value; int ret = get_file_md5(file_name, md5value);
if (ret < 0)
{
printf("get file md5 failed. file=%s\n", file_name.c_str());
return -1;
} printf("the md5value=%s\n", md5value.c_str()); }