就不用专业术语了,反正我也不是转业的,何必装?
曾几何时,我疯狂注册了很多论坛,网站,为了方便记忆,我索性将所有用户名和密码都能成一样的,相信很多人都和我差不多,后来很多网站出现了安全泄露问题,比如早期的CSDN,腾讯,还有更多,懒得搜索了.导致密码泄露,后面的故事就不说了.
然后,说说MD5吧.What's MD5?MD5算法是不可逆的,为什么呢?因为它用的是信息摘要算法,比如123,先进行摘要采样,比如变成了1(实际肯定不可能这么简单).天生就是不可逆的,中间丢失了元数据.大概如下图所示:
所以,很多网站都采用这种方案.安全得很.理论上是非常安全的,但如果稍微动下脑筋,方案就出来了,虽然有点傻,但就是可行.
我既然不能反推回去,那么我直接加密123这个字段,我也能得到MD5啊,然后直接用自己生成的MD5和泄露数据库的MD5做匹配,如果能够匹配上,那我们自然就能够知道明文密码.这就是彩虹表,生成一堆弱密码,MD5加密后的一个KV键值对.流程大概如下图:
所以,衍生出了盐值,怎么工作的呢?这个看策略,也可以自己写策略,我们下面来举个例子吧,text表示要加密的字段,salt表示随机生成的盐值,textWithSalt表示加盐后的字段
text=123
salt=abc
textWithSalt=123abc或者abc123,或者1a2c3b
textWithSalt的策略,完全可以自己写,框架也有提供,而且现在安全框架一般都支持循环加密,相信,如果很多网站开启循环加密,并且循环次数再次根据盐值特征而定(比如中间做一次AES加密,正好得到char数组,巴拉巴拉巴拉).我相信,这才是牢不可破的密码.就算有内鬼泄露了整套加密策略,破解难度也非常非常大.