MD5之前有多less个随机元素产生冲突?

我在Amazon S3上有一个图像库。 对于每个图像,我md5我的服务器上的源URL,加上一个时间戳,以获得一个唯一的文件名。 由于S3不能有子目录,因此我需要将所有这些图像存储在一个单一的文件夹中。

我需要担心产生的MD5散列值中的冲突吗?

奖励:在开始看到MD5产生的散列值发生冲突之前,我可以拥有多less个文件?

两个哈希偶然相撞的概率是1/2 128 ,其中 340个十亿分之一是282十亿分之一366十亿分之九百九十五分之一百九十四分之四十六分之四十五分之一百六十三分之三十七十亿分之六十万亿分之四千四百一十七亿七千八百一十一万一千一百一十五万四千五百六十五分

但是,如果你保留所有的哈希值,那么感谢生日悖论的概率会高一点。 要有50%的机会与任何其他散列相冲突你需要2 64散列。 这就意味着,平均而言,为了发生冲突,你需要在100年内每秒散列60 亿个文件 。

S3可以有子目录。 只要在密钥名中加上“/”,就可以像访问不同目录一样访问这些文件。 我使用它在S3中根据用户ID将用户文件存储在不同的文件夹中。

例如:“mybucket / users / 1234 / somefile.jpg”。 它与文件系统中的目录不完全相同,但S3 API有一些function可以使其工作几乎相同。 我可以要求它列出所有以“users / 1234 /”开头的文件,它会显示所有“目录”中的文件。

所以,等等,是这样的:

md5(文件名)+时间戳

要么:

md5(文件名+时间戳)

如果前者,你是通往GUID的大部分途径,我不会为此担心。 如果是后者,那就看Karg的post,最终你将如何碰撞碰撞。

碰撞的粗略经验法则是值范围的平方根。 你的MD5 sig大概是128位长,所以你可能会看到超出2 ^ 64图像的碰撞。

尽pipe随机MD5冲突极其罕见,但如果用户可以提供文件(将逐字存储),那么他们可以devise冲突发生。 也就是说,他们可以故意创build两个具有相同MD5sum但数据不同的文件。 确保您的应用程序能够以合理的方式处理这种情况,或者使用像SHA-256这样的更强大的哈希。

真的不pipe它有多可能; 有可能的。 它可能发生在前两个哈希函数(非常不可能,但可能),所以您需要从一开始就支持碰撞。

虽然MD5由于碰撞已经有了很好的公开问题,但随机数据之间的意外碰撞却非常罕见 。 另一方面,如果你正在对文件名进行哈希处理,那不是随机的数据,而且我希望能够很快地发生冲突。

MD5上的维基百科条目在这里很有帮助: http : //en.wikipedia.org/wiki/MD5

MD5碰撞是极不可能的。 如果你有9万亿的 MD5,9 万亿只有一个机会会发生碰撞。