language-agnostic - 我应该如何处理应用程序中的校验和冲突?

标签 language-agnostic hash hash-collision

我的应用程序有一部分用于存储文件。因为我们可能会添加许多相同的文件,所以我首先保留每个文件的哈希值。如果两个文件具有相同的哈希值,那么我们将丢弃一个,并且对该文件的两个“引用”都指向同一个物理文件。

  1. 我应该在多大程度上担心哈希冲突?

  2. 如果发生碰撞,我该怎么办?到目前为止,我的代码的全部症结在于没有两个不同的文件具有相同的哈希值。如果现在发生冲突,我的应用程序会抛出一个合法的不同文件并指向具有相同哈希值的文件。

  3. 我应该使用 MD5 以外的东西吗? SHA-1 是否具有更好的碰撞率?

最佳答案

除非您在一些非常关键的应用程序中,否则不要担心散列冲突。它们非常罕见,以至于很多事情都认为它们不会发生,如果这种假设最终被证明是错误的,那么灾难性的事情就会发生在这些事情上。

SHA1 比 MD5 具有更大的输出空间(并且已知的攻击也更少),因此它绝对不是一个更糟糕的选择。如果您害怕有人主动碰撞您的哈希值,那么 SHA 的后续变体(例如 SHA-256)可能是个好主意。

关于language-agnostic - 我应该如何处理应用程序中的校验和冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903547/

相关文章:

java - "the hash table is open"在Java中是什么意思?

go - 在 golang 中散列多个值

language-agnostic - 为什么垃圾收集器会卡住执行?

即使哈希没有改变,jQuery 地址哈希更改也会触发

hash - 不抗第二原像和不抗碰撞有什么区别

c++ - 删除包含结构的 vector 的 vector

cryptography - 对哈希函数的多重碰撞和第一次或第二次原像攻击之间有什么区别?

javascript - 找到排序数组值之间的最大差异

algorithm - 如何生成 float 的随机分区并且每个部分都有最小值pMin?

algorithm - 在线性时间内对数组进行排序的算法