用户密码保存

用户密码保存分析

JavaWeb项目中,用户密码保存方案决定用户信息的安全。依托好的设计实现,即便是黑客拿到系统的源码和数据库的用户表,也难以获取用户的密码明文,防止黑客继续撞库。


明文报错用户密码

用户登录系统流程

Created with Raphaël 2.1.2 开始 输入用户名密码 系统比对? 结束 登录失败 yes no no

最简单也是最危险的是明文保存用户的密码,拼接sql 语句对比(sql 注入)。一旦有人拿到数据库权限,直接可以导入用户名和对应的明文密码。

MD5 加密保存用户密码

为了防止明文密码泄露,一般系统都会使用md5 处理明文密码之后保存加密之后的密码字符串,登录的时候,根据用户输入的密码 再次进行md5 加密,与数据库保存的密码作对比。

MD5 加盐

随着MD5 的加密普及,黑客逐渐总结出彩虹表

彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。一般主流的彩虹表都在100G以上。 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的典型实践, 比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。使用加salt的KDF函数可以使这种攻击难以实现。

简单的md5 加盐算法的 是以固定字符串 作为salt 用户明文密码和salt 拼接之后计算md5 保存在数据库中,可以有效的防止彩虹表破解。

如果数据库和源码都泄露了,便存在风险。

有些密码采用了用户信息作为 salt 并多次加盐

有些在用户密码中加盐

这些都不同程度增加获取用户明文密码的难度。

对于采用微服务的分布式系统,可以采用分布式获取用户salt 防止数据库服务器被攻破后的密码泄露


参考:
简单MD5加密:http://blog.csdn.net/qq_21439971/article/details/53781442

用户密码加盐:http://blog.csdn.net/dragon064/article/details/47609567

https://blog.coderzh.com/2016/01/03/security-design/

猜你喜欢

转载自blog.csdn.net/keep_learn/article/details/79346441