媛代码社区

如何在数据库中安全的存储密码&如何做密码校验?

技术
codinggirls
· 阅读 333 · 评论 0 · 3 年前

首先列出两个不推荐的方式

1. 在数据库中直接存储纯文本的密码信息,这样所有能入侵数据库的黑客都可以获取到用户的密码信息,所以这样做非常不安全。

2. 在数据库中存储密码的哈希值。通常情况下,当字段经过哈希处理后,会生成一段哈希值,而哈希值一般是无法通过特定算法得到原始字段的。但是某些情况下,比如一个大型的彩虹表(有兴趣的小伙伴可以了解一下),通过在表中搜索该哈希值,很有可能在极短的时间内找到该散列值对应的真实字段内容。

那么有什么好的处理方式吗?这里推荐使用密码加盐的方式

1.什么是“盐”呢?

盐(Salt),在密码学中,指在哈希取值之前将内容(例如:密码)的任意固定位置插入的特定字符串。在哈希处理中加入字符串的方式被称为“加盐”。其作用是让加盐后的哈希值和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。

2.为什么加盐处理要比不加盐处理的方式更安全呢?

加盐的实现过程通常是在需要哈希取值的字段的特定位置增加特定的字符,打乱原始的字符串,使其生成的散列结果产生变化。比如,用户使用了一个密码:

x7faqgjw

经过SHA取值后,可以得出结果:

58ecbf2b3136ceda7fddfd986ba8bd8d59b2d73779691e839f3f176ce2c04b84

但是由于用户密码位数不足,短密码的散列结果很容易被彩虹表破解,因此,在用户的密码末尾添加特定字符串:

x7faqgjwabcdefghijklmnopqrstuvwxyz

因此,加盐后的密码位数更长了,散列的结果也发生了变化:

7b5001a5a8bcdcfa1b64d41f6339cfa7a5c0eca04cca6ff6a6c1d6aad17794cc

以上就是加盐过程的简单描述,在实际使用过程中,还需要通过特定位数插入、倒序或多种方法对原始密码进行固定的加盐处理,使得哈希值更加不容易被破解或轻易得到原始密码,比如:

x7afabqgcjw

根据以上加盐的理论,我们可以在数据库存储 salt 和 hash(password+salt)的方式来安全的存储密码

3.如何做密码校验?

  1)客户端传入 password

  2)后端获取数据库中对应的 salt 信息

  3)后端将 salt 和传入的 password进行哈希取值,例如结果为h1

  4)后端将 h1 与数据库中对应的 hash 值 h2 做比较,如果结果相同,那么密码校验通过





 

好了以上是一种密码安全存储的方式,小伙伴们还知道其它的方式吗?

 

3
帖子评论(0)
发起评论
暂无数据
Loading
推荐帖子
  • 招聘两名前端开发工程师
  • 项目招标
  • 今天看到米歇尔说的一句话,感觉很受...
  • 媛代码社区规则
  • 很正能量的一个社区,请问什么时候出...
社区宗旨
媛代码社区是女性科技从业者的聚集地
我们鼓励:
分享生活经验,日常趣事
晒晒您的作品,讨论讨论技术
也可以吐槽职场,抱怨不公
我们致力于:
让更多的人听到我们的声音
打破社会传统偏见!提升个人能力!
快来加入媛代码大家庭吧!
加入组织
二维码

媛代码社区微信公众号