如果我为每个用户随机创建SALT,我该如何对它们进行身份验证?

krx*_*krx 20 database passwords hash password-protection

我一直在阅读盐渍和散列密码的好处,但有一件事我仍然没有...

当我为每个用户提供随机盐时,当我尝试对他们进行身份验证登录时,如何知道盐是什么?

所以,如果我这样做..

HASHPW = PW.RANDOMNUMBER

我可以将随机数存储在数据库中,但这似乎会杀死添加盐的整个点......不是吗?我也可以为每个盐使用一个非随机数,但是那也会杀死盐点,因为如果他们弄明白,他们拥有我所有的用户密码......

我刚刚开始学习PHP和MySQL,这样的抽象事情让我感到困惑

谢谢!

Rex*_*x M 19

它并没有破坏独特盐的储存目的.唯一盐的目的是保护整个用户存储库免受攻击,而不是给定的单个用户.如果攻击者危害您的数据库并且确定足以破解特定用户的帐户,他们就会.我们无能为力.但他们必须花费大量的计算机时间才能这样做 - 足以让每个用户花费那么多时间是不可行的- 从而保护所有用户.与此相反,对所有用户使用相同的盐 - 一旦攻击者拥有盐,就可以在相对较短的时间内针对每个用户重新运行相同的表/进程.


Meh*_*ari 15

Salt是为每个用户随机生成的,但它保存在数据库的某个位置.您查找特定用户的salt并使用它来验证用户身份.

关键是,由于每个用户的盐不同,因此您无法使用预先构建的哈希字典来将哈希密码映射到明文(彩虹攻击).