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] = '\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()); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM