4

我想防止重复的内容。我不想保留内容的副本,所以我决定只保留 md5 签名。

我读到确实会发生 md5 冲突,不同的内容可能会给出相同的 md5 签名。

你觉得md5够用吗?

我应该一起使用 md5 和 sh1 吗?

4

8 回答 8

6

人们已经能够在人为的情况下故意产生 MD5 冲突,但为了防止重复内容(在没有恶意用户的情况下),它已经足够了。

话虽如此,如果你可以使用 SHA-1(或 SHA-2),你应该 - 你会在碰撞中稍微安全一点,但可以衡量。

于 2009-07-13T19:59:46.500 回答
3

MD5 应该没问题,碰撞很少,但如果你真的很担心,你也可以使用 sha-1。

虽然我猜签名真的没有那么大,所以如果你有空闲的处理周期和磁盘空间,你可以两者都做。但如果空间或速度有限,我会选择一个。

于 2009-07-13T19:58:00.823 回答
2

如果存在哈希冲突,为什么不简单地逐字节比较内容呢?哈希冲突非常罕见,因此您只需很少对字节进行字节检查。这样,只有在项目实际重复时才会检测到重复项

于 2009-07-13T20:20:10.357 回答
1

md5应该足够了。是的,可能会发生冲突,但发生这种情况的可能性非常小,除非你真的在跟踪数十亿条内容,否则我不会担心它。

于 2009-07-13T19:59:05.703 回答
1

如果您真的害怕意外碰撞,只需同时进行 MD5 和 SHA1 哈希并比较它们。如果它们都匹配,则它是相同的内容。如果任何一个不同,那就是不同的内容。

于 2009-07-13T20:16:01.753 回答
1

组合算法仅用于混淆,但不会增加散列算法的安全性。

恕我直言,MD5 无论如何都无法使用。研究人员证明了伪造 MD5 哈希值,他们证明了能够伪造产生 MD5 冲突的内容,从而为生成伪造的 CSR 以从 RapidSSL 购买他们不拥有的域名的证书打开了大门。 立即安全!第 179 集解释了这个过程

对我来说,基于 SHA 的哈希更强大,大多数开发平台都支持它,所以选择很容易。剩下的决定因素是块大小。

于 2009-07-13T20:35:36.770 回答
0

MD5 坏了,SHA1 接近了。使用 SHA2。

编辑

根据 OP 的更新,这里的故意碰撞似乎不是一个严重的问题。对于无意的散列,任何具有至少 64 位输出的像样的散列都可以。

一般来说,我仍然会避免使用 MD5 甚至 SHA1,但没有理由对此持教条主义。如果该工具适合这里,那么一定要使用它。

于 2009-07-13T19:58:02.853 回答
0

时间戳 + md5 一起就足够安全了。

于 2009-07-13T19:58:58.920 回答