两个具有相同字节长度的文件给出相同 md5 哈希值的百分比是多少?

两个具有相同字节长度的文件给出相同 md5 哈希值的百分比是多少?

我正在开发一个可以存储大量文件的应用程序,如果是图像,它会调整图像大小并保存我们需要的不同缩略图,因此当用户上传图像时,它会保存更多 8 个文件(这是需要的)。

为了避免重复文件并节省静态托管服务器上的空间,我的应用程序将文件名保存为“MD5.BYTE_SIZE”(例如:054d995efa7e9c91569d205d24a2b486.188154)

我已经在另一个客户端上使用过这个文件方案,没有任何问题,但我需要知道,特别是对于这个项目,是否存在用户发送具有相同 MD5 和相同大小长度的文件的可能性。

如果是这样,保存文件名的最佳方法是什么?使用两个不同的哈希值(例如 MD5.SHA-256.BYTE_SIZE)?

答案1

从实际目的来看,结果为零,除非用户主动尝试创建两个具有相同哈希值的文件,而使用 MD5 则有可能实现这一点。

如果改用 SHA-256,即使用户主动尝试创建两个相同大小的文件,结果也为“零”(出于实际目的)。

两个不同文件生成相同哈希值的确切概率约为 1/2^128。由于生日悖论,您需要大约 2^64 个文件,两个文件具有相同哈希值的概率才会达到 50%。在实践中不必担心这一点。对于 SHA256,这两个数字分别为 1/2^256 和 2^128。这两个数字也被称为“不会发生”。

答案2

从理论上讲这是可能的,但实际上两个不同的文件具有相同 MD5 校验和的可能性非常小。

换句话说,如此之小,就你的程序而言,你基本上可以将该事件视为不可能发生。

相关内容