#include <Poco/DigestEngine.h>
#include <Poco/DigestStream.h>
#include <Poco/MD5Engine.h>
#include <Poco/StreamCopier.h>
#include <fstream>
#include <string>
static constexpr const char* hex_table = "0123456789abcdef";
std::string Md5(const std::string& file_path) {
Poco::MD5Engine md5_engine;
Poco::DigestOutputStream output_stream(md5_engine);
std::ifstream file_stream(file_path);
Poco::StreamCopier::copyStream(file_stream, output_stream);
output_stream.close();
auto md5_val = md5_engine.digest();
std::string res = "";
for (int i = 0; i < 16; ++i) {
uint8_t c = md5_val.data()[i];
res += hex_table[c >> 4];
res += hex_table[c & 15];
}
return res;
}