我有一个带资源编译器的嵌入式资源位图,需要在程序启动时获取文件的 md5 哈希值。
我找到了与下面的链接等效的 C#,但到目前为止找不到任何相关的 C++ 资源..
对于 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();
}