Chromium base库 分段计算md5 c++

#include "base/base64.h"
#include "base/base_paths.h"
#include "base/command_line.h"
#include "base/files/file.h"
#include "base/files/file_enumerator.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/hash/md5.h"

//md5分段计算,针对大文件
const int kMd5BufferSize = 512 * 1024;  // 512 kB.
std::string GetMd5Test(const base::FilePath& file_path)
  base::File file(file_path, base::File::FLAG_OPEN | base::File::FLAG_READ);
  if (!file.IsValid())
    return std::string();
  base::MD5Context context;
  base::MD5Init(&context);
  int64_t offset = 0;
  std::unique_ptr<char[]> buffer(new char[kMd5BufferSize ]);
  while (true) {
    int result = file.Read(offset, buffer.get(), kMd5BufferSize );
    if (result < 0) {
      // Found an error.
      return std::string();
    }
    if (result == 0) {
      //文件结尾
      break;
    }
    offset += result;
    base::MD5Update(&context, base::StringPiece(buffer.get(), result));
  }
  base::MD5Digest digest;
  base::MD5Final(&digest, &context);
  //md5转base16
   return  base::MD5DigestToBase16(digest);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值