2 u012748258 u012748258 于 2014.12.13 19:07 提问

为什么MD5算法不能解密?

我知道密码经md5加密后,要验证密码只能再经md5加密,然后比较加密后的2个字符串。
md5不是算法计算出来的么。。类似 1<<2&1001,之类的。。为什么不能写一个逆向的算法呢。。

7个回答

caozhy
caozhy   Ds   Rxr 2014.12.13 19:59
已采纳

如果你有时间,强烈推荐这个视频
http://v.youku.com/v_show/id_XNDkyODExODY0.html
介绍了可数数、无穷映射的势以及图灵的可计算数,算是数学扫盲。

caozhy
caozhy   Ds   Rxr 2014.12.13 19:10

很简单,因为MD5是Hash算法,不是加密算法。一个MD5值对应的原始数据有无穷多个。
其实再想下,任何数据,包括几个GB的文件,通过MD5计算都能得到一个很短的定长的MD5值。我们假设这种解密方式存在,MD5岂不是世界上最强悍的压缩/解压缩算法了?

tdgwj
tdgwj 回复u012748258: 因为原始数据可以无限长
大约 3 年之前 回复
caozhy
caozhy 回复u012748258: MD5是定长的,比如32个16进制数,那么它最多只能对应16的32次方个不同的原始数据。虽然这个数字是一个天文数字,但是,原始数据如果超过这个长度,每一位的元字符集又比这个大,肯定不够映射的。
大约 3 年之前 回复
caozhy
caozhy 回复u012748258: 比如说,100个人进入一个只有50个座位的房间,无论怎么安排,肯定有人得站着。
大约 3 年之前 回复
caozhy
caozhy 回复u012748258: 一种运算,原始数据的长度多于结果数据的长度,那么掰着指头数,肯定一个结果对应n个原始值。
大约 3 年之前 回复
u012748258
u012748258 一个MD5值对应的原始数据有无穷多个。~我就是想多了解点是为什么会有无穷个。。。。我的算法不太好。
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.13 19:13

我们通常所说的MD5“解密算法”,其实是一种不规范的说法,正确的说法是MD5碰撞算法。也就是找出一个原始值,通过MD5运算得到的结果和给定的MD5一样。
但是原始值不见得就是当初做MD5运算的那个。碰撞算法已经被山东大学的杨小云教授破解。这意味着使用MD5对数据签名已经不可靠。

jeffsmish
jeffsmish   2014.12.13 20:22

MD5加密算法都是可以被解密的,只是时间问题。加密很简单,但解密耗工耗时很大。

u010707515
u010707515   2014.12.13 23:31

md5算法中包含很多取余的操作,不像楼主想的那样是什么函数之类的,所以没法解密

guwei4037
guwei4037   Ds   Rxr 2014.12.13 19:12
hashcat
hashcat   2015.09.19 20:43

所谓的md5解密,并非真正意义上的解密,是靠排列组合字符,生成md5 ,和原始值对比,如果一样就算解密成功。md5可以将任意大小的文件,字符,进行加密,加密到16位md5值上,是一个不可逆的过程。如果他能真正靠算法解密,就不可能把任意大小的文件生成固定的md5值,因为必然会有数据丢失。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!