密码怎么存入数据库安全

133 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

今天在开发一个web程序,关注到了注册登陆的问题,现在社会上越来越多的应用也都是需要登陆注册才能使用的。一般我们的账号一般都是邮箱📮或者手机号,密码的话,如果不是专业搞安全的人员,很少回专一的软件或者工具来记录密码,来吧个个应用密码给区分出来。

但是这样会有一个问题,就是一旦有一个平台的密码泄漏了那别的账号也可能不保了。可能牵连的服务很多。

参考知乎用户的文章我简简单单的谈一下我的理解谈谈密码安全:服务端密码保存 - 黄兢成的文章 - 知乎

我们在这里主要谈一下在产品后端,我们该如何保存好用户的信息,就算产品的后台数据库被hackers 拿到了,也不能得到密码,再或者更极端的一个情况 我们服务器被黑掉,hacker 拿到了我们的源码 知道了我们的加密算法和过程。这种情况该怎么保证安全呢?

我们来一点一点 提高 安全强度的讲。

明文密码

如果在数据库中直接存用户的明文密码的话,一旦hacker拖库了,用户信息将被一览无余。

加密密码

随着时间的推移,技术越来越强,在存储密码的时候也采取了一些特殊的算法,常用的有 md5和hash 算法,就是不在数据库里直接存明文密码了,而是存经过 计算的值,但是这个值 是不可逆的,也就是会所 加密后的密码,不能够算出原始密码。

这样用户在登陆的时候,就可以拿填写的密码加密处理,然后对比加密后的密文是否相同,来判断是否可以登陆。

这样做可能有两种不安全的情况

  • 既然是 hash算法 避免不了有冲突的情况 ,也就意味着 hacker 用其他密码 来得到相同的密文来登陆。
  • hacker可能会用彩虹表来进行爆破

彩虹表:现在大多数用户为了密码方便记忆,经常使用一些生日 、电话号等来做密码,彩虹表就是通过常用的加密算法,对这些信息进行加密后,得到的 明文和密文 对应关系的表,hacker可以通过密文,来查表 获取到 明文密码。

加密 + salt

我们可以讨论一种常用的保存密码方法,就是加密+Salt。Salt 在英文中是盐的意思,就是为原始密码加些其它信息。

为了防止查彩虹表倒推出我们的密码,我们就可以给密码 添加一些别的字符串 来进行加密处理。这样就可以很完美的解决彩虹表问题。

如果hacker 拿到了我们的源码,发现了我们的salt 和加密算法怎么办?

我们可以用随机的salt 每个用户的salt 不一样,比如说通过 用户的id作为salt 这样加密后的密码,就算hacker 拿到了我们的源码,他也是不能够拿到用户的密码的。