1

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

此外,将不胜感激提供到 C++ 实现的链接,最好是具有允许其在免费但闭源应用程序中使用的许可证的链接,如果可能,还可以在付费的闭源应用程序中使用。

4

1 回答 1

7

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

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

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

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

以下是一些用于 C/C++ 的加密库,它们实现了各种散列函数,并拥有适合您的用例的许可证:

  1. 加密++
  2. 牡丹
  3. OpenSSL
于 2013-04-17T16:16:55.060 回答