我在开发中遇到的密码存储方式


最近有同事做了一个机遇用户名+密码的注册登录功能,看了它采用的密码存储的方式,我觉得不是很安全,所以我把我在开发中遇到的密码存储方式总结一下。

1.密码存储方式

1.1 明文

在我开始学习编程的时候,密码存储直接使用明文方式存储,那时候还觉得这样存储比较方便,可以很方便的修改我后台用户的登录密码。那时候我是做了一个简单的CMS系统,也没有设置精细的权限,所以那时候根本没有考虑过安全的问题。这种方式是非常不安全的,但是我觉得,如果是一个简单的个人内部使用的小系统或者作为练习,这种明文存储密码的方式也没有什么问题。

1.2 hash(明文)

那时候记得刚开始上班,做后台管理系统,密码存储的方式是直接采用MD5加密存储在数据库,那时候觉得MD5方式非常安全,肯定没问题了。但是后来很多网站出现了密码泄露的问题,才知道采用MD5方式不是安全的。常用的破解方式有暴力破解、字典和彩虹表。

1.3 hash(明文 + 盐)

再后来,我们采用明文+盐的方式,将明文加个盐进行加密处理,然后存储的数据库。当时觉得这种方式好高级啊,这样基本上就破解不了吧,但是其实这里边还是有很多的坑关键在于这个盐怎么处理,在这里我也写过好几种方式。因为这个盐处理不好,就会严重影响密码的安全性,下面我就介绍一下我遇到的几种加盐的方式。

2. 盐的几种实现

在实际的开发中,我主要使用过以下几种加盐的方式:统一的盐、用户不可变的特征信息、随机盐(保存在数据库)、随机盐(从密码中获取)。

2.1统一的盐

在整个系统中,确定一个统一的盐,即所有用户的密码都使用统一的盐来处理,即所有用户的密码中的盐都是同一个字符串,这种方式一旦这个盐泄露了,那就等于这个密码存储方式是没有加盐,安全性比较低。

2.2 用户不可变的特征信息的盐

以用户不可变的特征信息作为盐,如果系统中某些用户的信息不予许修改,比如用户名或者手机号等,可以使用这种方式进行密码存储。但是一旦这种盐的代码逻辑泄露,仍然是和没有加盐一样,并且这种方式对业务不是很友好,那就是不允许你的手机号、用户名等信息不能修改,所以适用范围比较窄;

2.3随机盐(保存数据库)

后来借鉴了一些开源项目的做法,就是采用随机盐的方式,用户注册时候将密文和盐分别存储在数据库中,其中每当用户注册的时候,按照随机算法,随机生成不同的盐。这种方式本以为是很安全的了,但是这种方式其实风险很大,因为一旦你的数据库泄露了或者是程序员本身想做一些事情的,这就很容易进行密码的破解了,所以内部的安全性很低了。

2.4随机盐(从密码取)

这种方式也是采用随机盐,但是这里的随机盐不再存入数据库中,而是从密码中取。使用更复杂的单向加密算法比如Bcrypt,不再将盐存储到数据库中,这样即使我们的数据库被泄露,也不会出现什么问题。至于Bcrypt算法,我们以后找机会再详细分析。

3.小结

以上就是我自己开发中使用或者看到过密码存储方式,目前我主要使用复杂的单向加密算法Bcrypt来做明文的加密。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值