使用OpenSSL获取文件的MD5值
1. 基本原理
OpenSSL库提供了MD5的计算, 使用该库计算文件的MD5值
2. 实现代码
1 #include <openssl/md5.h> 2 #include <fstream> 3 #include <iomanip> 4 5 std::ifstream inStream(fileName, std::ios::binary); 6 constexpr int bufferSize = 1024 * 128; 7 char data[bufferSize]; 8 9 unsigned char c[MD5_DIGEST_LENGTH]; // MD5值,输出结果 10 11 if (inStream.is_open()) 12 { 13 MD5_CTX mdContext; 14 MD5_Init(&mdContext); 15 16 while (!inStream.eof()) 17 { 18 inStream.read(data, bufferSize); 19 std::streamsize nRecvNum = inStream.gcount(); 20 MD5_Update(&mdContext, data, static_cast<int>(nRecvNum)); 21 } 22 23 MD5_Final(c, &mdContext); 24 25 inStream.close(); // 关闭文件 26 27 // 打印输出, 格式化输出 28 std::stringstream ss; 29 ss.fill('0'); // 如果宽度不够, 采用0填充 30 for (int i= 0; i< MD5_DIGEST_LENGTH; i++) 31 { 32 ss << std::setw(2) << std::hex << static_cast<int>(c[i]); 33 } 34 35 return ss.str(); 36 37 }
------------- 勿在浮沙筑高台