C语言 32位校验和算法质量优于CRC32



是否存在32位校验和算法:

  • 输入数据大小的哈希碰撞概率更小<1 KB ?
  • 碰撞命中分布更均匀。

这些相对于CRC32。我实际上不考虑第一个属性,因为32位存储空间的限制。但是第二次……似乎可以有所改进。

有什么想法吗?谢谢。(我需要具体的实现,在C中更好,但c++/c#或任何开始也是可以的)。

MurmurHash怎么样?据说,该哈希具有良好的分布(通过卡方检验)和良好的雪崩效应。

不符合第一个条件。对于任何一对输入,任何设计良好的32位输出哈希函数都有1/2^32的碰撞机会。第二个标准没有很好地定义,尽管确实有一些可以使用的统计测试,我相信有人已经做过了(碰撞间隔的卡方?)至于需要实现,我强烈建议您不要接受任何不是众所周知的散列实现的散列函数的建议代码,因为在滚动自己的散列或加密时存在很高的安全问题或性能差的风险。一个众所周知但糟糕的哈希函数比你自己设计的哈希函数要好,即使后者测试得很好,并且具有"良好"的碰撞分布,只是因为前者有更多的眼球。

最新更新