如何计算大文件的 MD5 和 SHA 校验和
How to Calculate the MD5 and SHA checksum of a huge file?
我想计算一系列大文件的MD5和SHA校验和。每个文件都是关于1GB
,所以我希望尽可能快。
谁能帮忙推荐一些高效的C++库?
顺便说一句,
读取文件时,fread( buffer, sizeof(char), BUFFER_SIZE, fin )
,BUFFER_SIZE
的大小是合理的?
你可以使用Openssl。搜索关于MD5大文件的神秘答案如何在 C 中创建字符串的 md5 哈希?当您查看 Openssl SHA 文档时,您会发现 MD5 和 SHA 使用这些函数的方式是相同的。SHA Openssl Docs
我个人会做FILE *pipe = popen("md5sum filename");
[或类似的事情] - 它可能和其他任何东西一样快,因为 1GB 的文件需要一点时间才能读取,并且计算不太可能占用您的大部分 CPU 时间 - 大部分时间将等待磁盘加载文件。
在我的系统上,我创建了 6 个文件,每个文件为 1GB,使用 md5sum 对文件校验和需要 2 秒。(所有 6 个文件均为 12 秒(。
在我的头顶上,我不知道任何快速C++库。计算哈希相对简单,因此任何 C 库都很容易使用(您可以轻松地自己将其包装在 C++ 类中(。我找到了以下网站,其中一个人在 x86 汇编中实现了几种哈希算法,并将它们与相同算法的"官方"C 实现进行了比较:
https://www.nayuki.io/page/fast-sha1-hash-implementation-in-x86-assemblyhttps://www.nayuki.io/page/fast-md5-hash-implementation-in-x86-assembly
这些实现应该是一个很好的起点,然后你只需要使文件 I/O 尽可能高效。内存映射 I/O 通常非常有效,或者您可以变得复杂并使用两个线程:一个线程从文件中读取块,另一个线程散列读取的数据。这里的想法是始终保持进程做一些有用的事情,即可以在等待从文件中读取更多数据的同时计算哈希。
- 在Javascript和C++中计算MD5哈希的不同结果
- Generate boost::uuids::uuid from boost::compute::detail::sha
- C++ SHA-512 的实施不起作用
- 如何在 C++ 中从 GUID 生成 SHA-1 字节数组
- md5 inC++ with UTF16LE
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- 为什么当我在MD5 Hash中转换相同的C 字符串时,每次都会获得不同的输出
- C++ 中的 MD5 实现返回不正确的摘要
- SHA-256的双分部分的十六进制表示
- 如何使用Boost计算文件的MD5
- MD5哈希的密码盐字符串的格式是什么?
- 阻止基于md5哈希执行特定的.exe文件
- Win32 MD5哈希器的奇怪行为
- 为什么如果我启动几次程序,我的 md5 总是不同的
- Android NDK 获取二进制文件的 md5
- 如何使用openssl/sha.h对文本文件进行SHA256哈希处理
- CMake检查下载文件的哈希值(MD5/SHA256)
- 如何在openssl中从SHA切换到SHA-1
- 如何计算大文件的 MD5 和 SHA 校验和
- 反转给定(小)输入长度的 SHA-1 或 MD5,无需蛮力