algorithm - Triple-CRC-32 对于生成非安全均匀分布哈希来说是一个坏(或不是)主意吗?

标签 algorithm hash checksum crc32 bijection

我有一个 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/

相关文章:

arrays - 为具有已知行/列总和和最大单元格值的矩阵找到可能的解决方案

algorithm - 直播 : How does it work?

c++ - leetcode : can someone explain why this method works? 中的最大数

c++ - 我如何找到简单哈希算法的冲突

c# - SQLite : how? 中的 SHA1 哈希

c - 使用 char 缓冲区随机播种

c - 有没有方法从内部 UDP 校验和预测外部 UDP 校验和

检查两个系统之间的 (USB) 连接中的位错误(对于游戏)

algorithm - 在点的四叉树中,如果插入点恰好落在分割线上,如何分割四边形?

c - C 中 <linux/crc32.h> 和 <zlib.h> 的 crc32() 实现之间的区别