Random 在MD5产生碰撞之前有多少个随机元素?

Random 在MD5产生碰撞之前有多少个随机元素?,random,md5,hash,Random,Md5,Hash,我在AmazonS3上有一个图像库。对于每个图像,我在服务器上md5源URL加上时间戳以获得唯一的文件名。因为S3不能有子目录,所以我需要将所有这些图像存储在一个平面文件夹中 我是否需要担心生成的MD5哈希值中的冲突 额外好处:在MD5生成的哈希值中出现冲突之前,我可以拥有多少个文件?这并不重要;这是可能的。它可能发生在您散列的前两件事情上(不太可能,但可能),因此您需要从一开始就支持冲突。冲突的粗略经验法则是值范围的平方根。您的MD5 sig大概有128位长,因此您可能会在2^64图像的上方和

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

我是否需要担心生成的MD5哈希值中的冲突


额外好处:在MD5生成的哈希值中出现冲突之前,我可以拥有多少个文件?

这并不重要;这是可能的。它可能发生在您散列的前两件事情上(不太可能,但可能),因此您需要从一开始就支持冲突。

冲突的粗略经验法则是值范围的平方根。您的MD5 sig大概有128位长,因此您可能会在2^64图像的上方和上方看到冲突。

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

例如:“mybucket/users/1234/somefile.jpg”。它与文件系统中的目录并不完全相同,但S3API的一些特性使其工作原理几乎相同。我可以让它列出所有以“users/1234/”开头的文件,它会显示该“目录”中的所有文件。等等,是不是:

md5(filename) + timestamp
或:

如果是前者,那么大部分情况下你都是GUID,我不会为此担心。
如果是后者,请参阅Karg的帖子,了解你最终将如何遇到碰撞

虽然MD5因冲突而出现了众所周知的问题,但随机数据之间的意外冲突仍然存在。另一方面,如果对文件名进行哈希运算,则这不是随机数据,我预计会很快发生碰撞。

仅仅两个哈希意外碰撞的概率是1/21281/340个不精确的282分厘366个不精确的920分厘938个分厘463个分厘374个分厘607万亿431十亿768百万211000 456个



然而,如果你保留了所有的散列,那么概率会更高一点,这多亏了。要使任何哈希与任何其他哈希冲突的几率达到50%,您需要264哈希。这意味着要获得冲突,平均而言,您需要散列。

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

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

当然,可能会发生许多其他不好的事情,概率为1/2^128。你可能不想单挑这个来担心。这里可能发生的最糟糕的事情是你可以拍一张照片。对于一个相对较小的数字,我不会担心。现在,如果你的软件控制着自动驾驶仪降落飞机,那就另当别论了。你不是认真的。你需要每秒散列60亿个文件,每秒钟散列100年,这样才有可能发生冲突。即使你非常不走运,也可能需要比S3的全部容量更长的时间才能使用。你的数据库及其备份失败的可能性要高出数十亿倍。冲突不值得担心。使用冲突预防时间构建一个存储库来放置您的服务器!那些讨厌的流星会击中你(可能性很小,但也有可能),所以你需要支持流星庇护所,以防乞讨。你可能指的是128位,而不是2^128.:-)关于这个问题的更多信息。我在泰勒的例子中遇到的唯一问题是,如果有人得到你数据库的副本,他们可能会使用彩虹表来计算信用卡号码……而我不会选择使用MD5来计算信用卡,一个包含10000000之间所有有效信用卡号码的彩虹表(8位是我见过的最小长度的信用卡)和9999999999999999(最大的16位数字)仍然是一个需要生成的大表。可能有更简单的方法来窃取这些数字。“碰撞概率为1/2^64”-什么?冲突的概率取决于已经散列的项目的数量,它不是一个固定的数字。事实上,它正好等于
1-sPn/s^n
,其中
s
是搜索空间的大小(
2^128
),和
n
是散列的项数。你可能想的是
2^64
,这是你需要MD5散列的项数的近似值,有50%的冲突几率。+1因为我一直想知道如何计算超过999万亿lol的项数(哦,是的,你的答案很有用)不幸的是,您仍然不正确。您假设哈希函数是真正随机的。它不是。这意味着碰撞概率更高。若尔根福:所有物理定律都“不正确”也可以。这种程度的学究主义是没有必要的,因为它不会以任何有意义的方式改变答案。所以你是说有机会!请详细说明包含时间戳如何增加成功的机会collision@BradThomas:不是。MD5冲突风险是相同的,无论是在文件名上还是在filena的组合上me+时间戳。但在第一种情况下,您需要同时具有MD5冲突和时间戳冲突。这仍然会使每分钟有2^(128^60)次与两个用户发生冲突的机会。实际上无法使用。@BradThomas更清楚地说:
MD5(文件名)+时间戳
大大降低了碰撞风险,因为您需要进行md5碰撞
md5(filename + timestamp)