1.MD5
MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆.但是虽然不可逆,但是不是说就是安全的。因为自从出现彩虹表后,这样的密码也"不安全"
彩虹表:彩虹表就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码。越是复杂的密码,需要的彩虹表就越大,现在主流的彩虹表都是100G以上
为什么MD5不安全?
MD5是一种加密算法,通常用于在数据库中存储密码,
但是这种算法不再安全。因为MD5算法是确定,用一个字符串计算出来的哈希值也是固定的,所以出现了一些针对该算法的破解方法。
- 暴力枚举法:因为可以不断尝试,并且随着计算机硬件能力的快速提升,使得这种方法来破解短密码称为了可能
- 字典法:也就是撞库,黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,通过撞库来完成破解
- 彩虹表:在字典法的基础上改进,以时间换空间,使用预计算的哈希链集来降低存储空间,是目前最常用的方法
如何解决?
加盐:可以在数据库中加密更长的密码,并且黑客很难找到相应的密码。
请确保选择长字样以充分提高安全性
使用长密码:使用更长的字符或者增加密码的复杂度,以确保他们使用的是大写,小写和特殊字符
用其它哈希函数:比如BCrypt算法
2.Bcrypt
Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。你也可以简单理解为它内部自己实现了随机加盐处理
BCrypt
算法可以随机生成盐,并将盐信息混入最终加密后的密码之中,验证时会自动提取BCrypt
算法引入了工作负载机制,生成Hash值的时间大大延长,相应的破解难度也随之增加
3.对于这两种加密方式的对比和总结
(1)BCrypt加密: 一种加盐的单向Hash,不可逆的加密算法,同一种明文(plaintext),每次加密后的密文都不一样,而且不可反向破解生成明文,破解难度很大。
(2)MD5加密: 是不加盐的单向Hash,不可逆的加密算法,同一个密码经过hash的时候生成的是同一个hash值,在大多数的情况下,有些经过md5加密的方法将会被破解。
(3)Bcrypt生成的密文是60位的。而MD5的是32位的。
(4)目前,MD5和BCrypt比较流行。相对来说,BCrypt比MD5更安全(因为破解难度更大了),但加密更慢。 虽然BCrypt也是输入的字符串+盐,但是与MD5+盐的主要区别是:每次加的盐不同,导致每次生成的结果也不相同。
(5)BCrypt的破解增加了,就会导致系统的运行成本也增加
(6)最后需要知道的是,密码学的应用安全是建立在破解所要付出的成本远超过能得到的利益上的