1 使用Crypto++计算文件的md5

使用Crypto++计算文件的md的md5值,需要使用到Crypto++以下类:

  • FileSource: 用于从文件中读取数据
  • HashFilter: 表示一个用于计算哈希的过滤器。它接受一个哈希函数作为参数,这里是 md5
  • md5: 用于计算输入数据的 MD5 哈希值
  • HexEncoder: 用于将二进制数据编码为十六进制表示
  • StringSink(dst 或 digest): 用于将数据写入字符串。在这里,它将最终的哈希值以十六进制字符串的形式写入到 dstdigest

示例代码如下

#include <iostream>

#include "md5.h"
#include "files.h"
#include "hex.h"

#if defined(WIN32) || defined(_WIN32) || defined(_WIN32_) || defined(WIN64) || defined(_WIN64) || defined(_WIN64_)
#include <Windows.h>
#endif

int main()
{
    CryptoPP::Weak1::MD5 md5;

    std::string file_path = "example.mp4";
    std
    CryptoPP::FileSource(
        file_path.c_str(), true,
        new CryptoPP::HashFilter(
            md5, 
            new CryptoPP::HexEncoder(new CryptoPP::ArraySink(buf, size)))
    );

    std::string file_hash = std::string(reinterpret_cast<const char*>(buf), size);

    std::cout << "file md5: " << file_hash << std::endl;

    return 0;
}

或者使用以下更加简洁的代码

#include <iostream>

#include "md5.h"
#include "files.h"
#include "hex.h"

int main()
{
    std::string file_path = "C:\\Users\\HuangWang\\Desktop\\7-00001-Aa.mp4";

    CryptoPP::Weak1::MD5 md5;
    std::string file_hash = "";

    CryptoPP::FileSource(
        file_path.c_str(), true,
        new CryptoPP::HashFilter(
            md5, 
            new CryptoPP::HexEncoder(new CryptoPP::StringSink(file_hash)))
    );

    std::cout << "file md5: " << file_hash << std::endl;

    return 0;
}

参考