有趣的是,我还没有找到足够的关于单个 512 位散列(如 whirlpool)与 4 个 128 位散列(如 md5、sha1 等)串联的碰撞机会的测试或实验的信息。
当执行散列的数据非常小,平均只有 100 个字符时,4 个 128 位散列看起来相同的可能性似乎比单个 512 位散列的可能性小。
但这只是一个没有根据的明显猜测,因为我没有进行任何测试。你怎么想的?
编辑 就像是
512 位哈希与 128 位哈希。 128 位哈希。 128 位哈希。 128 位哈希(4 个 128 位哈希串联)
编辑 2
我想为此使用哈希 index on url or hashing considering RAM
目的是尽量减少冲突的可能性,因为我想将哈希列设置为唯一而不是 url 列。
编辑3
请注意,这个问题的目的是找到最小化碰撞可能性的方法。话虽如此,为什么我需要更多地关注最小化碰撞的可能性?这是我的 Edit2 描述,它导致找到使用更少 RAM 的解决方案。因此,利益在于最小化冲突和降低 RAM 使用率。但这个问题的主要焦点是降低碰撞的可能性。
最佳答案
听起来您想比较以下碰撞行为:
hash512(x)
碰撞行为为:
hash128_a(x) . hash128_b(x) . hash128_c(x) . hash128_d(x)
其中“
.
”表示连接,而hash128_a
, hash128_b
等是四种不同的 128 位哈希算法。答案是:它完全取决于所涉及的单个散列的属性。
例如,考虑 128 位哈希函数可以实现为:
uint128_t hash128_a(T x) { return hash512(x)[ 0:127]; }
uint128_t hash128_b(T x) { return hash512(x)[128:255]; }
uint128_t hash128_c(T x) { return hash512(x)[256:383]; }
uint128_t hash128_d(T x) { return hash512(x)[384:511]; }
在这种情况下,性能将是相同的。
关于hash - 512 位哈希 vs 4 128 位哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407835/