码迷,mamicode.com
首页 > 编程语言 > 详细

linux c++ 文件获取md5

时间:2018-05-12 00:03:18      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:iges   bin   linux c   fstream   mem   编程   for   final   shell命令   

  当前在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()); }

 

linux c++ 文件获取md5

标签:iges   bin   linux c   fstream   mem   编程   for   final   shell命令   

原文地址:https://www.cnblogs.com/foreverstars/p/9026436.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!