为什么要给密码加盐
经常使用“盐”来增强哈希是密码存储中的关键安保措施,能够防止彩虹表攻打,并使暴力破解愈加艰巨。
什么是“盐”?
盐(Salt) 是一段随机生成的数据,用于与密码一同启动哈希计算,以确保即使用户的密码相反,存储在数据库中的哈希值也不同。
经过为每个用户生成惟一的盐,可以有效防止攻打者经常使用估量算的彩虹表(即一张曾经计算好罕用密码和对应哈希值的表)来破解密码。
为什么须要“盐”?
假设不经常使用盐,多个用户的相反密码会生成相反的哈希值。这样,一旦攻打者拿到数据库,他可以轻松找到哪些用户的密码相反,甚至经常使用预先计算的哈希值表来极速破解经常出现的密码。
例如,假定两个用户都经常使用了便捷的密码“password123”。没有盐的状况下,它们的哈希值是相反的。攻打者可以经过查找这个哈希值来立刻破解密码。添加盐之后,即使密码相反,生成的哈希值也会不同,从而提高安保性。
如何生成和经常使用“盐”?
以下是经常使用“盐”启动哈希计算的完整流程:
步骤1:生成随机盐
盐必定是随机生成的,且应该经常使用加密安保的伪随机数生成器(如 SecureRandom)来确保其难以预测。
盐值的长度应至少为 16 字节,以确保足够的随机性和安保性。
步骤2:将盐与密码联合
将生成的盐值与用户输入的密码启动拼接(普通是将盐值加在密码的前面或前面)。
步骤3:对盐化后的密码启动哈希解决
经常使用适合的哈希算法(如 bcrypt、Argon2、scrypt)对“盐化”后的密码启动哈希解决。
步骤4:将盐与哈希值一同存储
将生成的盐值与哈希值一同存储在数据库中。通常盐值可以地下存储,由于它并不须要加密。
如何验证密码?
验证用户登录时,环节如下:
其余保障密码安保的措施
除了给密码加盐外,以下列出一些罕用的保障密码安保的打算: