首頁 >後端開發 >php教程 >md5 对不同的输入 会有相同的输出吗?

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

WBOY
WBOY原創
2016-06-06 20:14:432344瀏覽

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 的漏洞了。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn