生成非安全统一分布散列的三重 CRC-32 是不是一个坏主意?

Is triple-CRC-32 a bad (or not) idea for generating a non-secure uniform distribution hash?

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

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

不过,我也知道 CRC 不用于此类应用程序。通常会使用 MetroHash 等算法。

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

注意:这不是用于任何安全的东西。

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

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

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

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