我有一个 288 位的输入(包括 4 × 32 位恒等函数输出和 10 × 16 位整数)。我需要将其哈希为 96 位,并尽可能减少冲突。目标可以表述为具有概率冲突的 key 压缩。
我知道 CRC 是一个双射哈希,从而确保 100% 均匀分布(据我所知)。在我看来,我应该能够通过输入运行 3 个并行 CRC 路径,从而产生最佳分布的 96 位有损哈希(显然不是双射)。
但是,我也知道 CRC 不用于此类应用程序。通常会使用 MetroHash 等算法。
有人可以向我解释为什么 CRC 对于这个应用程序来说是一个坏(或不是)的主意吗?
注意:这不用于任何安全目的。
最佳答案
当然,这可行,但可能还有更好的方法。
要使其工作,您需要使用三个不同的 CRC-32 和三个不同的多项式。即使这样,也要小心它们没有公因数(例如 x+1),以确保三者之间没有相关位。
更好的方法是像 xxhash 中使用的那样,但扩展到 96 位。在软件中这会更快。
为什么是 96 位?这似乎是一个不必要的长哈希。
关于algorithm - Triple-CRC-32 对于生成非安全均匀分布哈希来说是一个坏(或不是)主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47617560/