zoukankan      html  css  js  c++  java
  • linux c++ 文件获取md5

      当前在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] = '';
        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 ", file_name.c_str());
        return -1;
      } printf(
    "the md5value=%s ", md5value.c_str()); }
  • 相关阅读:
    下载windows原装镜像的官方网站
    Typora快捷键
    UOS使用ZSH终端教程
    UOS每日折腾、调教、美化
    AMD64和X86_64
    CPU架构
    23种设计模式---单例设计模式(精华)
    java学习day32-Servlet上下文--ServletContext
    java学习day32-Servlet过滤器-Filter
    java学习day32-JSP标签技术-JSTL标签库
  • 原文地址:https://www.cnblogs.com/foreverstars/p/9026436.html
Copyright © 2011-2022 走看看