hash - 如果我散列一堆散列,散列冲突的可能性有多大?

标签 hash simd hash-collision

假设我使用散列来识别文件,所以我不需要它来确保安全,我只需要尽量减少冲突。我在想我可以通过使用 SIMD 并行运行四个散列然后散列最终结果来加速散列。如果散列被设计为采用 512 位 block ,我只需一次性遍历文件,采用 4x512 位 block 并从中生成四个散列;然后在文件末尾,我将四个生成的哈希值哈希在一起。

我很确定这种方法会产生较差的哈希值……但会差多少?有任何粗略的计算吗?

最佳答案

从磁盘读取文件 block 的速度比散列它们的速度更快,这个想法是未经检验的假设吗?磁盘 IO - 甚至 SSD - 比哈希所经过的 RAM 慢很多数量级。

确保低冲突是所有哈希的设计标准,所有主流哈希都做得很好——只需使用主流哈希,例如MD5.

具体到发帖者正在考虑的解决方案,并不能说明并行散列会削弱散列。有专门为 block 的并行散列设计的散列并结合发帖人所说的结果,尽管可能尚未广泛采用(例如 MD6 ,它完整地从 SHA3 中退出)

更一般地,有mainstream implementations使用 SIMD 的散列函数。哈希实现者非常performance-aware ,并花时间优化他们的实现;你会得到一份与他们的努力相当的艰苦工作。 strong 散列的最佳软件大约是 6 到 10 个周期/字节。 Hardware accelerated如果哈希是真正的瓶颈,也可以使用哈希。

关于hash - 如果我散列一堆散列,散列冲突的可能性有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1706461/

相关文章:

ruby - 以数组为键的哈希

java hashMap<Integer,String> 碰撞

hash - md5哈希冲突。

c# - 散列和 GetString/GetBytes 问题

algorithm - 独特的行李代币生成器

python - 匹配文件中的哈希值

arm - NEON 边境检查

c++ - 优化的 SIMD vector 库是否由等效的标量运算执行?

c++ - 如何使用_mm_extract_epi8函数?

Java哈希冲突概率