如果我理解正确,任何PHP升级,或移动到不同的服务器都会使以前散列的密码(存储在数据库中)无用?因为新系统中的盐会有所不同。
这让我对自动生成盐的用例感到好奇。
答案 0 :(得分:6)
password_hash()
现在(从PHP 7.1。*开始)仅使用bcrypt
进行散列密码。 Salt与哈希一起保存,因此升级或移动到另一台服务器不会使哈希变得无用。
正如 @Jay Blanchard 所说in his comment,自动盐是一个优势,因为你不必关心。一切都方便自动处理。
你甚至不应该自己创造盐,因为在你自己生成盐时非常easy to make a mistake(非随机盐,盐的随机来源不正确等)。 / p>
此外,自salt
password_hash
算法中的PHP 7.0.0起,bcrypt
选项已弃用,因此PHP将始终使用自动生成的salt。
答案 1 :(得分:4)
为每个密码生成salt,并将其存储为您从password_hash函数返回的字符串的一部分。因此,每次散列密码时都会有所不同。我们在密码中使用salt的原因是每次创建一个新的哈希值,所以如果两个用户使用密码" hunter2"它们将被存储为数据库中完全不同的值,使得彩虹表无用。
因此,迁移到新服务器不会使之前的哈希密码失效。
答案 2 :(得分:-2)
如果您想使用手动盐,您可以使用它。即使您转移到新服务器,以前的密码也不会无用。
Trick是你可以存储手工盐字符串,你通常存储网站的常量,例如,Db用户名,数据库密码....
因此,即使您移动到新服务器,仍然使用手动盐字符串和以前加盐的数据。