hash - 512 位哈希 vs 4 128 位哈希

标签 hash cryptography hash-collision

有趣的是,我还没有找到足够的关于单个 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/

相关文章:

postgresql - 使用 pgcrypto 库计算 postgres 数据库中存在的公共(public)证书的 x5t#s256 指纹

hash - CRC校验和的分布

ruby - 在 Ruby 中使用 << 将键/值对附加到散列

hash - if 语句的 Ocaml 错误

security - 如何从私钥中提取指数和模数?

java - CFB模式输出与CTR输出相同;难道我做错了什么?

go - 如何在使用线性探测解决冲突后从哈希表中检索值?

c - 在 C 中寻找数组(与链表)哈希表实现

c - 在 C 中正确使用 mod 运算符

c - int => int 映射的哈希函数