暴力破解(这是不可阻止的破解方式之一,在给定长度的情况下尝试各种字符的组合,虽然效率非常低,但通过遍历最终一定会得到密码,相当于把所有的可能都尝试一遍)
字典攻击(同样是不可阻止的破解方式之一,相当于暴力破解的升级版,通过收集常用的单词,词组,密码然后将所有的都存储起来,根据这些更加接近的数据进行比对,碰运气去猜)
查表法(预先计算密码字典中得每个密码,然后把哈希值和对应密码存储到一个快插查询的数据结构中,以后就查询这个表就行了)
彩虹表(这才是大杀器,说白了就是把一定长度的明文密码以及对应的哈希密码都存储下来,然后按照查表法的方式进行破解)
我们上面说到的几种破解方式都是基于一个最基本的原则,所有密码都以相同的方式进行哈希加密.也就是说如果两个账号明文密码相同,他们哈希后得到的密文也是相同的.如果我们能通过一些'小手段'让它们不同,那么破解的难度就是指数级的倍增了.
具体的做法就是在密码中加入一段"随机化"的字符串,然后再进行哈希化.这样就将原来的同样明文映射到同样密文的规则打乱了,其中混入的'随机'字符串就是所谓的'盐'.
这些思想都不复杂,但是在真正的工作中大多数人还是会犯下一些"错误",使我们的料加的并不好,比如:
"盐值"的长度太短(通常要和密文长度一样才行)或者"盐值"出现重复
哈希函数进行嵌套或者组合使用(非常重要的一点,别相信自己发明的某种加密方式,使用由密码学家研究出来的标准算法)
尽量避免使用已经过时或者低端的哈希函数,例如: MD5,SH1等,推荐SH256,SH512等等.
"盐值"的产生并不是一个随意的rand()函数,要使用基于加密的伪随机函数生成器,更加高度的随机性.