• 作者:老汪软件技巧
  • 发表时间:2024-11-22 07:03
  • 浏览量:

译者:菜小鸟魔王

怎样在数据库中存储密码?Hashing

黑客如果发现密码是以明文形式存储的,就能轻而易举地获取这些密码。

因此,我们需要通过哈希函数来对密码进行转换。

存储库密码安全数据中不包括_密码加密保存在数据库中_

使用哈希函数转换密码

哈希函数的作用在于,它能够将密码转换成一个独一无二的字符串 —— 我们称之为“指纹”。重要的是,这种转换是不可逆的,也就是说,你无法从“指纹”反推出原始的密码。

在众多哈希函数中,bcrypt尤为受欢迎,原因有三:(1)它的运算速度较慢。(2)它需要消耗大量的计算资源。(3)它对内存的需求也很高。这些特性使得黑客想要尝试多次破解密码变得相当困难。

_密码加密保存在数据库中_存储库密码安全数据中不包括

通过类比理解哈希

可以将哈希函数比作颜料混合的过程 —— 一旦两种颜色混合,就很难再分离出原始的颜色。

存储库密码安全数据中不包括_密码加密保存在数据库中_

对密码应用哈希函数的处理流程

对密码应用哈希函数的处理流程如下:

系统会将新生成的指纹与数据库中存储的指纹进行对比,只有两者匹配时,用户才能获得系统访问权限。

最精彩的部分就要来了,准备好阅读了吗?

Salting

黑客可能会利用彩虹表从指纹中破解出密码。

因此,我们在密码中加入了“盐”(salt)。

存储库密码安全数据中不包括__密码加密保存在数据库中

彩虹表

可以将彩虹表视为一个预先计算好的指纹与密码之间的映射表。

而“盐”则是一个随机字符串。

存储库密码安全数据中不包括__密码加密保存在数据库中

向密码中加入“盐”以创建独特的指纹

每位用户都会获得一个唯一的“盐”,从而生成不同的指纹。简单来说,即使两个用户有相同的密码,他们的指纹也会不同。

加入盐之后,因为指纹变得独一无二,彩虹表就失效了。这会使得彩虹表中预先计算好的值失效。

存储库密码安全数据中不包括_密码加密保存在数据库中_

对密码加盐的处理流程

对密码加盐的处理流程如下:

存储库密码安全数据中不包括_密码加密保存在数据库中_

密码的验证流程

密码的验证流程如下:

准备好学习下一个技巧了吗?

Stretching

黑客可能会采取穷举法攻击来破解密码。

可以把穷举法想象成是在尝试密码锁上所有可能的数字组合。

因此,他们采用了 Stretching 技术。

存储库密码安全数据中不包括_密码加密保存在数据库中_

Stretching原理

可以将 Stretching 技术理解为多次使用同一个哈希函数。这样做使得穷举法攻击的速度减慢,难度增加。

_密码加密保存在数据库中_存储库密码安全数据中不包括

随机生成的密码通常更为安全。(密码长度建议超过12个字符。)

这会拖慢黑客的攻击速度,增加破解密码的难度。