密码存储
1,明文存储
存储简单,直接,风险大。数据库中可以直接看到用户密码,容易发生信息安全事故。造成一码通。由于大多数人的密码在多个app,网址等的密码,为了方便记忆,都采用相同的密码。
2,md5摘要加密hash(明文)
速度快,毫秒级别,但是存在安全隐患,可以被破解。
破解方式:
1,暴力破解
2,字典
3,彩虹表
3,hash(明文+盐)
盐的几种实现:
- 用户名 手机号等 每个账户不一样
- 统一的盐
- 随机盐(保存数据库)
- 随机盐(从密码取)
其中前三种都是不安全的,都存在安全漏洞。
最后一种是安全的,将随机盐保存在密码中。
防止破解
没有绝对安全的网络,即使拿不到密码 也可以发送重放攻击
- 多次加盐取hash
- 使用更复杂的单向加密算法比如Bcrypt
- 使用https
- 风控系统
- 二次安全校验
- 接口调用安全校验
- 异地登录等
- 大额转账
例如:springSecurity中的Bcrypt结构:
实现校验
1,获取保存在数据库的密码:
2,与前台传递过来的密码,为了安全最好加密
loginParams['username'] = values.username
loginParams.password = md5(values.password)
Login(loginParams).then((res) => {}
3,采用相同的加密方式,对前台传递过来的密码进行加密,加密后与保存在数据库中的密码比较。进行认证。spring框架集成了springSecurity框架