c++ 获取嵌入资源的 md5 哈希值

问题描述 投票:0回答:1

我有一个带资源编译器的嵌入式资源位图,需要在程序启动时获取文件的 md5 哈希值。

我找到了与下面的链接等效的 C#,但到目前为止找不到任何相关的 C++ 资源..

c# 在提取嵌入资源之前获取其 md5 哈希值

c++ hash md5 embedded-resource
1个回答
0
投票

对于 C++,您可以使用各种可用的库,例如 OpenSSL。此代码应将文件名作为输入,以二进制模式读取文件,并使用 MD5_Update 使用文件内容更新 MD5 上下文。读取整个文件后,它使用 MD5_Final 完成哈希计算。最后,它将二进制哈希转换为十六进制字符串表示形式。

#include <openssl/md5.h>
#include <fstream>

std::string calculateMD5(const std::string& filename) {
    std::ifstream file(filename, std::ifstream::binary);
    if (!file) {
        std::cerr << "Error opening file: " << filename << std::endl;
        return "";
    }

    MD5_CTX md5Context;
    MD5_Init(&md5Context);

    char buffer[BUFFER_SIZE];
    while (file.read(buffer, sizeof(buffer))) {
        MD5_Update(&md5Context, buffer, file.gcount());
    }

    MD5_Final(buffer, &md5Context);

    std::ostringstream result;
    result << std::hex << std::setfill('0');
    for (int i = 0; i < MD5_DIGEST_LENGTH; ++i) {
        result << std::setw(2) << (static_cast<unsigned int>(buffer[i]) & 0xFF);
    }

    return result.str();
}
© www.soinside.com 2019 - 2024. All rights reserved.