c++ MD5 文件
时间: 2024-08-12 08:10:41 浏览: 42
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,用于生成文件或数据的固定长度摘要,通常用作数据完整性校验或唯一标识。在C++中,你可以使用第三方库如`openssl`、`boost`或者自定义实现来处理MD5。
1. OpenSSL库:C++中使用OpenSSL计算MD5可以通过`ssl::md5`函数或者`SHA256_CTX`类,它提供了API来初始化、更新和最终获取哈希值。
```cpp
#include <openssl/md5.h>
// ...
std::string md5sum(const std::string& filename) {
MD5_CTX ctx;
unsigned char hash[MD5_DIGEST_LENGTH];
FILE* file = fopen(filename.c_str(), "rb");
if (file) {
MD5_Init(&ctx);
fread(hash, sizeof(unsigned char), sizeof(hash), file);
MD5_Final(hash, &ctx);
fclose(file);
std::stringstream ss;
for (int i = 0; i < MD5_DIGEST_LENGTH; ++i)
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);
return ss.str();
}
return "Error opening file";
}
```
2. Boost库:如果你使用Boost库,`boost::uuids::detail::md5`函数也支持MD5计算。
```cpp
#include <boost/uuid/detail/md5.hpp>
// ...
std::string md5sum(const std::string& filename) {
boost::uuids::detail::md5_CTX ctx;
boost::uuids::detail::md5_init(&ctx);
std::ifstream file(filename, std::ios::binary);
if (file) {
char buffer[4096];
while (file.read(buffer, sizeof(buffer)))
boost::uuids::detail::md5_update(&ctx, buffer, file.gcount());
boost::uuids::detail::md5_finish(&ctx);
std::vector<unsigned char> hash = boost::uuids::detail::md5_get_digest(ctx);
std::stringstream ss;
for (unsigned char c : hash)
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(c);
return ss.str();
}
return "Error opening file";
}
```
阅读全文