非常低的冲突非加密散列函数

Very low collision non-cryptographic hashing function

我正在编写一个使用散列来加速文件比较的应用程序。基本上,我预先对文件 A 进行哈希处理,然后该应用程序运行并将文件夹中的文件与之前经过哈希处理的文件进行匹配。我目前寻找哈希函数的标准如下:

那么在这里使用什么算法比较好,我使用的是 C#,但我确信大多数算法都可以在任何平台上使用。就像我说的,我正在使用 SHA-256,但我确信有更好的东西。

Yann Collet 的 xxHash 可能是一个不错的选择(Home page, GitHub)

xxHash is an extremely fast non-cryptographic hash algorithm, working at speeds close to RAM limits. It is proposed in two flavors, 32 and 64 bits.

至少有 4 个 C# impelmentations 可用(参见主页)。

我过去用它取得了很好的成绩。

哈希大小为 32 位或 64 位,但 XXH3 正在制作中:

XXH3 features a wide internal state of 512 bits, which makes it suitable to generate a hash of up to 256 bit. For the time being, only 64-bit and 128-bit variants are exposed, but a similar recipe can be used for a 256-bit variant if there is any need for it one day. All variant feature same speed, since only the finalization stage is different.

一般而言,散列越长,其计算速度越慢。 64 位哈希对于大多数实际用途来说已经足够了。

您可以通过组合两个哈希函数(例如 128 位 XXH3 和 128 位 MurmurHash3)来生成更长的哈希值。