2

我有一个 288 位的输入(包括 4 × 32 位恒等函数输出和 10 × 16 位整数)。我需要将其散列到 96 位,并尽可能减少冲突。目标可以被描述为具有概率碰撞的密钥压缩。

我知道 CRC 是一个双射散列,因此可以确保 100% 的均匀分布(据我所知)。在我看来,我应该能够通过输入运行 3 个并行 CRC 路径,从而产生 96 位有损散列(显然不是双射的)的最佳分布。

但是,我也知道 CRC 不用于此类应用程序。通常会使用诸如 MetroHash 之类的算法。

有人可以向我解释为什么 CRC 对这个应用程序来说是一个坏(或不是)的主意吗?

注意:这不适用于任何安全的事情。

4

1 回答 1

2

当然,这可以工作,但可能有更好的方法。

要使其工作,您需要使用三个不同的 CRC-32 和三个不同的多项式。即使这样,也要小心它们没有公因子(例如 x+1),以确保三者之间没有相关位。

更好的是像 xxhash 中使用的方法,但扩展到 96 位。这在软件中会更快。

为什么是 96 位?这似乎是一个不必要的长哈希。

于 2017-12-03T17:49:22.590 回答