我已经有了一个图像图书馆在亚马逊S3。每一个图像,我md5源URL我的服务器上加上有时间戳,以获得一个独特的文件。由于S3不能有子目录,我需要存储所有这些图像在一个单一的文件夹。

我需要担心碰撞的MD5hash值得产生的?

奖励:如许多文件可以,我有我才会开始看到冲突中的散列值MD5产生?

有帮助吗?

解决方案

两个哈希值意外碰撞的可能性 1/2 128 这是 340 in uncillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607万亿431亿768,000 211 000 456。

但是如果保留所有哈希值,那么由于生日悖论,概率会略高一些。要让任何哈希与任何其他哈希冲突的几率为50%,您需要 2 64 哈希值。这意味着,为了平局,您需要哈希每年6 十亿个文件 100年

其他提示

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

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

等等,是吗:

md5(filename) + timestamp

或:

md5(filename + timestamp)

如果是前者,你大部分都是通往GUID的,我也不会担心。 如果是后者,那么请参阅Karg的帖子,了解你最终会如何碰撞。

一个粗略的规则对于冲突的平方根值范围内。你MD5sig大概是128位长,所以你们将有可能看到的碰撞上和超过2^64图像。

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

虽然由于碰撞已经公布了MD5的问题,但随机数据之间的意外碰撞是非常罕见。另一方面,如果您对文件名进行哈希处理,那么这不是随机数据,我希望快速发生冲突。

MD5碰撞极不可能。如果您有 9万亿 MD5,那么 9万亿中只有一次机会发生碰撞。

它的可能性并不重要;有可能的。它可能发生在您散列的前两个事项上(非常不可能,但可能),因此您需要从一开始就支持冲突。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top