MD5简介和不可逆原因,以及攻防⼿段简介
MD5是⼀种信息摘要算法,不可反向解密。不管原⽂是什么,最后得到的密⽂长度都为32个16进制字符,不区分⼤⼩写。
特点是:
1、原⽂即使改动很⼩,密⽂就会发⽣巨⼤变化,“⾯⽬全⾮”,毫⽆规律。
2、原⽂长度没有要求,密⽂的长度固定,32个16进制字符。
3、相同的原⽂,⽣成相同的密⽂。
4、不同的原⽂,⼤概率得到不同的密⽂,极⼩概率得到相同的密⽂。因为密⽂由32个16进制字符组成,可能性组合就是16的32次⽅,密⽂的可能性是有限的,⽽原⽂可能性⽆限多,⽆限对应有限,必定会出现碰撞。
字符串截取拼接不固定5、原⽂区分⼤⼩写,密⽂不区分⼤⼩写。
原⽂:123456,MD5密⽂:E10ADC3949BA59ABBE56E057F20F883E
原⽂:123457,MD5密⽂:F1887D3F9E6EE7A32FE5E76F4AB80D63
编码问题
在计算MD5时,原⽂会先转换成byte,有可能会产⽣编码问题。
以GB2312和UTF-8编码为例。特别是中⽂,⽤GB2312和UTF-8编码分别转换成byte,结果不⼀样。
所以在编写代码时,各处使⽤的MD5算法,应该使⽤相同的编码,否则可能导致相同的原⽂,产⽣不同的密⽂。
使⽤
MD5是不能进⾏常规的反向解密,使⽤时⼀般⽐较密⽂,如果密⽂⼀样,则认为原⽂⼀样,不需要知道原⽂到底是什么。
虽然存在碰撞的可能性,不同的原⽂,它们的密⽂相同,但是实际使⽤中因为概率低,在⾮极端安全要求的情况下,不考虑这种情况。
使⽤密⽂⽐对,数据库不会保存原⽂。因为密⽂⽆法反向解密,所以除了⽤户,即使系统管理员也⽆法知道⽤户的密码原⽂。
不可逆原因
原因很简单,因为MD5是⼀种摘要算法,所谓摘要,就是会有⼀些信息丢失,⽆法得知丢失的信息,也就⽆法逆运算。
⽐如,120,121,122去掉最后⼀位数字,结果都是12,没有办法知道去掉的到底是什么数字。
暴破
既然MD5⽆法逆运算,那为什么⽹上还有MD5破解?其实不是真正意义上的破解。
⼀、暴⼒破解
如果知道原⽂是00-99的纯数字,那就把00-99所有的可能数字都算出MD5,⼀个个进⾏⽐对。⼆、字典破解
⽹上有⼀些MD5的字典库,就是原⽂和密⽂的对应表,但是数据量很⼤,上万亿级别,如果你的密⽂正好在字典库⾥,⼀查对应表就⾏。
其实不管⽤什么加密算法,密码长度都是影响安全的重要因素。只要你原⽂长度够长,够复杂,暴⼒破解和字典破解成功的概率⼏乎为0。
(按现在的民⽤计算机的计算能⼒,当密码到⼀定长度,这辈⼦都⽆法完成暴破。当然说不定以后会普及超级计算机,这就不讨论了)
防御
对⽐破解⼿段,防御⼿段相对简单,并且⾼效。
1、不要在别⼈的⽹站上计算md5。有的在线md5加密⽹站,你⽤了,会把你的原⽂和密⽂保存到他的字典中,然后向别⼈提供收费字典破解服务。这⼀条最重要!
2、增加原⽂长度。
防暴破:原⽂到⼀定长度,暴破已经不太可能。假设原⽂是12位数字和⼩写英⽂的组合,原⽂的可能性就有36的12次⽅。假设每秒计算500万次,把所有的可能性都试⼀遍,⼤概需要3万年。
防字典破解:字典破解也会因为原⽂长度增加⽽失败。字典中的数据来源有2种⽅式,1是⽤户⼿动加密的时候存⼊,⽐如上⾯⼀条红⾊注意点,2是服务器不间断遍历字符串,不间断⽣成原⽂和密⽂。但是限于计算机的计算能⼒,需要很长的时间才能遍历到长度较长的字符串。所以只要原⽂长度够长,字典中肯定不会有你的数据。字典中唯⼀可能存在的是相同的密⽂,但是肯定⽆法匹配到相同的原⽂。
3、加密时加⼊【salt】,也可以叫,加盐值、紊乱字符串、随机字符串。原来加密⽅式是原⽂直接⽣成密⽂,加盐是先把原⽂加上⼀个字符串再⽣成密⽂。这样做的好处有2个。
①增加原⽂长度和⽣僻度,增加破解难度。123456在字典中有数据,⼀下就被破解,但是多加⼀个盐,123456ABC,可能字典中就没有了。
②安全隔离不同的客户或应⽤。A客户,B客户,使⽤不同的salt,那即使算法完全⼀样,⽣成的密⽂也是不⼀样的。举个不恰当的例⼦,A客户破解了软件和算法,想⽤相同的算法伪造⼀条B 客户的数据,但是会发现不知道B客户的salt,⽆法⽣成在B客户那边有效的数据。
salt⽰例:
输⼊相同的原⽂【123456】
直接md5加密:结果→ MD5(123456)= E10ADC3949BA59ABBE56E057F20F883E
A客户 salt = AAA:结果→ MD5(123456AAA)=
5DEC5DBF7FE7A7163626B0A63CAEA3AB
B客户 salt = BBB:结果→ MD5(123456BBB)=
F1E4078CA30ED7AED04E1462E6AB0740
可以发现,相同的原⽂,A客户和B客户的密⽂不⼀样。只要salt保密,算法即使公开,也⽆法伪造数据。
salt和原⽂的拼接⽅式可以⾃定义。
4、⼆次摘要,就是对⽣成的密⽂再做⼀次处理。可以再⼀次MD5,也可以做位移,丢弃,等等,当然也可以做三次、四次、五次……摘要。
输⼊相同的原⽂【123456】
直接md5加密:结果→ MD5(123456)= E10ADC3949BA59ABBE56E057F20F883E
⼆次md5(做2遍md5):结果→ MD5(E10ADC3949BA59ABBE56E057F20F883E)=
F59BD65F7EDAFB087A81D4DCA06C4910
丢弃(丢弃16个字符):结果→ E10ADC3949BA59AB
丢弃后加⼊随机字符串:结果→ E10ADC3949BA59ABF59BD65F7EDAFB05(其实后加的16个字符毫
⽆意义,是随便加的)
这么做也有2个好处,极⼤增加暴破和字典破解难度,极⼤的迷惑性。丢弃法会让⼈想不到是md5,加⼊随机串会让⽆意义的内容⼲扰破解,在不知道算法的情况下,基本⽆从下⼿。⼆次摘要的⽅法还有很多,不⼀⼀列举了。
基本上防御⼿段很⾼效,能破解的都是弱密码,懒程序员。。。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论