欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

md5 对不同的输入 会有相同的输出吗?

程序员文章站 2022-06-08 08:18:15
...
md5 产生32位的值, 32位排列下来是有限的,面对无限的输入,怎么可能都得到不同的输出呢,求解

回复内容:

md5 产生32位的值, 32位排列下来是有限的,面对无限的输入,怎么可能都得到不同的输出呢,求解

md5是一种摘要算法,并且是不可逆的,所以即使不同的输入出现相同的输出,对我们的操作也不会产生任何影响。因为我们在程序中,永远是获取原始值,然后通过md5算法处理,之后进行比对,只要比对结果一致,便可。

会,md5可以被认为是一种有损压缩算法,不同的字符串压缩之后有可能得到相同的md5值,但是在知道原文和md5的情况下要构造出相同md5的字符串比较困难。
破解md5的一种方法就是通过字典,事先计算出大量字符串的md5值,要破解的时候进行查询。另一种破解方法是通过碰撞,需要找和原字符串有相同md5的字符串。

一般都说“不同的文件几乎不可能遇到相同的 md5 值”,但是这个“几乎”其实可以忽略了。

暴力对比 md5 值,可以在网上查得到,也就几十万条,但是 md5 值的可能性是 36^32 ,这个数字是很巨大的 …
(6.3340286662973277706162286946812e+49)

同时,md5 演化的历史里有提到,在前面几代的摘要算法中,的确存在漏洞使得不同的文件有相同的 md5 值,而之所以有 md5 出现,就是为了弥补这个漏洞。

还有和 @我才是二亮 提到的一样,即便发生了这样的问题,但是因为 md5 校验主要是校验数据在传输的过程中有没有产生错误,所以只要同一个文件在传输前后两次求 md5 相同即可。

但是如果是用来校验两个文件是否相同,那就得看能不能发现新的 md5 的漏洞了。

相关标签: md5 php