ホームページ >バックエンド開発 >PHPチュートリアル >md5 对不同的输入 会有相同的输出吗?
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 的漏洞了。