什么哈希算法用于快速文件哈希?

时间:2013-04-17 16:04:13

标签: c++ hash

正如标题所说,我正在寻找的是最好的常见哈希算法。散列10mb左右的文件应该相对较快,并且它应该尽可能安全以避免冲突。

此外,我们还希望能够获得一个指向C ++实现的链接,最好是一个允许在免费但封闭源应用程序中使用的许可证,如果可能的话,还可以使用付费的闭源应用程序。

1 个答案:

答案 0 :(得分:7)

我会说当散列文件时,你的瓶颈很可能是文件I / O而不是散列算法本身。显然,除非你选择一个非常慢哈希算法(我知道在主流使用中没有那么慢),或者你的硬件非常不寻常和特殊,这个观察仍然存在。

为了给你一些(非常不准确的)数字,加密哈希算法的大多数优秀实现(可能比你需要的强得多)运行数百兆字节或每秒几千兆字节,但大多数常见的磁盘系统运行每秒几十兆字节或几百兆字节。

请注意,在这些(非常粗略的)数字中,我忽略了文件系统和操作系统的开销,而且我假设您将使用加密哈希算法(通常比较简单的算法慢。)< / p>

总而言之,我的建议是你只选择像MD5或SHA-1或SHA-256(这些都是加密哈希)这样的东西,这些哈希有很多好的,快速的和免费的实现,并且几乎可以消除任何碰撞的机会。而不是选择快速但劣质的哈希算法,优化您的I / O(通过对文件进行异步/非阻塞读取),因为这是瓶颈所在。

以下是一些用于实现各种哈希函数的C / C ++加密库,并且具有适合您用例的许可证:

  1. Crypto++
  2. Botan
  3. OpenSSL