当前在linux系统下,shell命令可以获取md5值,如下:
如果进行c++编程,在代码里执行shell命令可以获得,但是很不雅观,特别是了解了system或者popen函数的机制之后。现在介绍使用openssl的md5函数生成文件md5:
#include#include #include using std::string;int get_file_md5(const std::string &file_name, std::string &md5_value){ md5_value.clear(); std::ifstream file(file_name.c_str(), std::ifstream::binary); if (!file) { return -1; } MD5_CTX md5Context; MD5_Init(&md5Context); char buf[1024 * 16]; while (file.good()) { file.read(buf, sizeof(buf)); MD5_Update(&md5Context, buf, file.gcount()); } unsigned char result[MD5_DIGEST_LENGTH]; MD5_Final(result, &md5Context); char hex[35]; memset(hex, 0, sizeof(hex)); for (int i = 0; i < MD5_DIGEST_LENGTH; ++i) { sprintf(hex + i * 2, "%02x", result[i]); } hex[32] = '\0'; md5_value = string(hex); return 0;}int main(int argc, char* argv[]){ string file_name = "/home/dev/test.txt"; string md5value; int ret = get_file_md5(file_name, md5value); if (ret < 0) { printf("get file md5 failed. file=%s\n", file_name.c_str()); return -1; } printf("the md5value=%s\n", md5value.c_str());}