在实际应用中,很多网站都存放着一定的用户信息,当中最为重要的当然是用户密码,因为密码被破解意味着这个用户的所以信息都暴露了。当然大部份的站长都会考虑到这个问题,所以会对密码使用一定的加密策略,有可逆的,有不可逆的,当然可逆的加密策略只能说是防君子,防不了小人的,相信大部分站长都不是“小白”,今天我们主要计论的是不可逆的加解策略,针对不可逆加解来说,相信大家都第一反应会想到MD5,这是目前最流行的哈希加密算法,也是目前大部分网站使用的密码加密方法,其次再介绍几个不可逆的加密算法:SHA1,SHA256,SHA384,SHA512,SHA1可谓是跟MD5同一年代的算法,加密后得到40位的密文,相信也会有一部份站长会使用SHA1来加密密码信息。在几年前,中国一位伟大的科学家***(忘记什么名字了),提出MD5和SHA1可被破解的说法,引起了不少人的争议,当然今天为止也没有很科学的破解算法出现。后者SHA256,SHA384,SHA512则是目前都还没有人提出可能被破解的算法,SHA256的密文长度为64位,SHA384的密文长度为96位而SHA512的密文长度则长达128位。一些安全要求性相比较高的网站有可能已经用上了SHA256算法加密密码,而SHA384和SHA512由于密文长度过长、加密耗时和效率等各方面的原因,目前是少有使用的。
今天主要讨论的是流行的MD5加密的安全性。作为一种不可逆的加密算法,理论上来说是最安全不过了,由于不可逆,就算你拿到密文也还原不了原文。但实际上是这样吗?我们先从MD5的算法原理上开始一步一步研究这个问题,MD5的算法是把任意长度的信息经过一系列的逻辑运算后得到一串唯一的32位的密文,也就是说不同的明文经过MD5算法加密后是100%不会存在重复的,这相信也是大部人信任MD5的一个重要的原因吧。但实际上这一串32位的密文它的安全性到了什么样的地步呢?
下面我们来了解一下MD5的破解技术。有人可能会问“不是说不可逆吗?不是说还没有破解的算法吗?那谈什么破解呢?那一切不是空谈吗?”,如果没有真的绝对不可破解,相信我今天也不会写这篇文章。这里跟大家介绍一种最常用也是最笨的破解方法:字典破解法。之所以说它是最笨的,是因为这种方法效率最低,技术含量最少,跟我们平时说的暴力破解没很大的区别。原理应该是这样子的:用一个程序,不断进行了for循环,然后把循环得到的值进行MD5加密,然后把明文和加密后的密文作为一条纪录存到数据库里,而破解的时候则是一个逆过程,把手上的密文跟数据库里的纪录进行比较,有纪录的就可以得到明文,没有的就说没有。相信这是目前大部分在线MD5破解的核心原理。这种方式,时间越长,数据量越多,破解的机率就越大,如果没有条件限制的话,理论上没有破解不了的密码。
那上述所说的破解方法,目前到了什么样的状态呢?根据实测(绝不虚假),9位以内纯数字的MD5密文可破解,6位以内的母字+数字组合可破解(一切免费)。看到这里不知道你是否觉得惊讶,但这确实已经成了事实。这样的一个测试可以还不能很好的说明什么,然后我又进行了下一个测试,把某个数据库里的用户数据随机抽取了一部份实测了一下,其中一少部份为IT行业程序设计人员,发现90%以上的密文被破解,大部份密码只有6位,多为纯数字组合,一部份为2-4个字母加几个数字。根据这个测试说明了大部份人的密码使用的习惯,无论你是普通的老百姓,还是有专业知识的IT技术人员。在这种情况下,大家的用户密码还安全吗?又有多少人衡量过这个问题呢?
针对MD5加密的安全性问题,本人发表一下本人的解决方法。第一、使用更先进的加密方法(如SHA256、SHA384、SHA512),当然目前这些加密方法还没有具体的内置函数支持,需要自己写加密函数。第二、密文加工,也就是把得到的MD5密码进行一次加工,比如在指定的位数里加入一些没用的数值,达到混淆密文的目的,例如在第4、8、12、16、18、24、28、32位后面加入随机值,从而形成40位的密文,以让破解都以为这是以SHA1加密的,这样一来,破到世界末日也不可破得了,当然这里也有缺点,就是如果知道规律,一样可以破,规律从哪来?能拿到你数据库,拿你个网页文件还难吗?第三,这种方法个人认为是最为有效的加密方法,感谢一老外网站给的灵感。就是二次加工再加上二次加密,什么意思呢?例子,通过一次MD5加密后得到32位的密文,然后在密文的后面加上指定的字符集比如SB123,然后再拿这个组合后的字符串进行二次加密,如再进行一次MD5加密,或进行一次SHA1加密。加工后的字符串长度越长,破解的机率越少,前提是MD5算法不能被破解。