好久没更新了,今天翻电脑里的文档,看到以前整理的,重新编辑一下,还是发在这里供以后翻阅吧。
很多应用都将用户密码通过MD5算法散列后保存,而不再保存密码明文。MD5是单向的,并不存在逆向算法。但入侵者在获得MD5散列字符串后依然可能通过多种方法破解成明文密码。
一般地,破解MD5是指:
(1)对于任意y,求x,使得MD5(x)=y;
(2)给定x1,求x2,使得MD5(x1)=MD5(x2);
(3)求x1、x2,使得MD5(x1)=MD5(x2).
任何能够满足上述3个条件之一的方法称为MD5破解算法。目前还没有一个算法能满足条件1,符合条件2或3的碰撞算法已由山东大学王小云教授发现。尽管如此,但是对于普通用户而言,从算法上破解MD5仍非常困难,所以MD5仍然一种相对安全的算法。
目前,对MD5密码的直接攻击主要有穷举法或彩虹法。穷举法是把可能出现的密码明文用MD5运算后,得到的散列值直接与需要破解的MD5散列值进行比较,判断该明文是否是已知MD5散列值所对应的密码明文。当密码空间确定时,穷举法的破解效率取决于计算机的运算性能,除直接用CPU进行计算外,还可以利用GPU的高并行计算性能来处理。
彩虹法是在穷举法的基础上进行了改进,把得到的MD5散列值和原始的明文数据构成一对一的字典映射表(明文数据位数越多,该映射表长度将呈几何级数增长),然后通过搜索和匹配的方式从映射表中找出破解密码所对应的原始明文。一般采用软件算法来生成字典映射表,当明文数据的随机性很强时,彩虹法要求海量的存储设备来存储映射表,并构建非常高效的搜索引擎和算法。显然,彩虹法的破解效率取决于计算机的存储空间和搜索机制。
MD5散列值一般为32位,也有16位散列。一般地,16位MD5值是取32位的第9位到24位,也即是去除了32位值的前8位和后8位,基本上16位MD5值要直接转换为32位是不可能的。
目前网上有很多网站提供MD5加密或者解密查询。解密是将加密后的MD5值输入到网站中,如果网站数据库中存在该MD5值,则对应的MD5明文即为密码。常用的MD5在线破解网站(有国内、国外的,有免费也有部分收费的)有:
http://www.cmd5.com
http://www.xmd5.com
http://www.hashkiller.co.uk/
http://www.md5this.com/
http://www.netmd5crack.com/
另外要注意,MD5散列值大小写的区别,有些网站并不都能识别。