为保证数据安全,数据库密码类字段设计成不可逆的定长密文,转为密文的过程需加盐。
写了个编码工具类,数据库字段的安全性可以保障。
- 防撞库(密码碰撞攻击),大多数用户习惯问题,多个网站使用同一密码, 某个网站数据泄露后,其他网站密码若使用明文存储,就太尴尬了,用户账号安全性完全没有保障。
- 防拖库后用户密码泄露,若数据库通过sql注入被拖库,攻击者即便拿到数据,密码为不可逆的密文,保证了用户密码不会被泄露。(不过话说回来,已经被拖库了,虽然密码不会暴露,但用户信息已经泄露了。。。)
- 防彩虹表攻击。攻击者一般会事先建表或直接使用网上已有的各种库,单次哈希算法基本都已无效,虽然算法不可逆,但是查表可得密码。这种情况就需要算法不暴露,当然最关键的还是加盐。
Encode工具类
|
|
思想:明文密码传入, 与盐做异或运算,得值,将值Md5,得到字节数据,直接进行base64运算。将以上步骤重复多次,得到结果即为存储值。
测试类
仅查看输出结果唯一。
测试输出
md5得到字节数组直接进行base64(第一种) 与 md5转为字符串再base64(第二种)不是一回事,结果完全不同。
第一种
encodeStrMd5调用encodeMd5ByteDirectToBase64
第二种
encodeStrMd5调用encodeMd5HexToBase64