繁体   English   中英

password_hash:自动生成的盐比手动生成的盐有什么优势?

[英]password_hash: any advantages of automatically generated salt over manual?

如果我理解正确,那么任何PHP升级或迁移到其他服务器都会使以前散列的密码(存储在数据库中)无用吗? 因为盐在新系统上会有所不同。

这使我对自动生成盐的用例感到好奇。

现在(从PHP 7.1。*开始) password_hash()仅使用bcrypt哈希密码。 Salt与哈希一起保存,因此升级或移至另一台服务器不会使哈希无效。

正如@Jay Blanchard 在他的评论中所说,自动盐分是一种优势,因为您不必在意。 一切都方便且自动地处理。

您甚至不应该自己创建盐,因为在自己生成盐时也很容易出错 (非随机盐,不正确的盐随机来源等)。

此外,在password_hash bcrypt算法中,自PHP 7.0.0起不建议使用salt选项,因此PHP将始终使用自动生成的salt。

盐为每个密码生成,并存储为您从password_hash函数返回的字符串的一部分。 因此,每次您对密码进行哈希处理时,它都会有所不同。 我们在密码中使用salt的原因是每次创建哈希时都会获得一个新的哈希,因此,如果两个用户使用密码“ hunter2”,则它们将作为完全不同的值存储在数据库中,从而使Rainbow表无效。

因此,迁移到新服务器不会使以前散列的密码无效。

如果要使用手动盐,可以使用它。 即使您移至新服务器,先前的密码也不会无效。

窍门是您可以在通常存储站点常量的位置存储手动盐字符串,例如Db用户名,DB密码...。

因此,即使您移至新服务器,您仍将使用手动盐字符串和以前的盐数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM