关于现在的密码存储的安全性,有很多需要考虑的问题. 直接明文存储或者 双向加密(可以解密)存储都是不可取的
有很多人使用了单向加密的方式-----MD5加密
但是MD5加密后的安全性并不高。同样可以解出来
因此产生了hash+盐的存储方式
MD5加密
- 特性:单向加密,不可以解密。
- 特性:同一个密码每次MD5加密后生成的字符串是相同的
基于相同这一个特点,只要枚举所有短密码进行 md5 加密,做成一个索引表,就能轻易的逆推出原始密码
hash+盐
- 盐是指随机生成的key
- 很多加密算法都是采用hash+盐的方法
- 效果:由于盐的随机性,同一个密码每次加密后生成的字符串是不同的
以pbkdf2算法为例:
- 存储步骤:
1. 随机生成一段数组作为盐.
2. 将密码与盐进行n次加密操作,得到一个特定长度的密码 。(n值越大迭代次数越多,越安全)pbkdf2.Key(密码, 盐, 迭代次数, 生成长度, 加密操作)
3. 再与盐进行拼接,然后再进行一次双向加密得到最终结果,存储在数据库中 - 登陆解密:
1. 读取数据库中的密码,进行双向解密。并且截取特定长度之后的字符串得到盐
2. 将登陆时传入的密码与盐进行n次加密操作与数据库密码的前特定长度位进行比较
3. 相等则登陆成功,不等则登陆失败