【问题标题】:Will password_verify work on existing hashes after PASSWORD_DEFAULT is updated?PASSWORD_DEFAULT 更新后,password_verify 会在现有哈希上工作吗?
【发布时间】:2015-10-09 20:02:22
【问题描述】:

PHP manual 暗示使用 PASSWORD_DEFAULT 更加健壮,因为随着 PHP 的较新版本的发布,散列算法将保持最新。

但是,它没有提到旧哈希是否会在哈希算法更新后失败。大概他们会,因为哈希值会不同。然而,这对于毫无戒心的开发者来说似乎非常不友好,并且没有对此事发出警告。

PHP 是否会以某种方式在幕后优雅地处理这个问题,或者更新 PHP 的 PASSWORD_DEFAULT 会强制我的所有用户更改密码?

【问题讨论】:

  • 散列包含用于生成散列的算法,因此老用户的散列应该继续工作,只要 PHP 支持该散列算法。哈希字符串开头的$..$ 之间的内容是识别信息。

标签: php security hash


【解决方案1】:

不,它们不会失败,因为生成的哈希值实际上包含算法、盐、成本等作为编码的一部分,所以 password_verify() 知道如何使用正确的算法和其他细节进行验证

【讨论】:

    【解决方案2】:

    它们仍然可以工作。查看password_verify 上的文档,强调我的:

    请注意,password_hash() 返回算法、成本和盐作为一部分 返回的哈希值。 因此,所有需要的信息 验证哈希是否包含在其中。

    因此,旧哈希仍然包含在哈希本身中验证它们所需的信息。在验证时,如果提供了较旧的哈希,则根据较旧的算法对其进行验证。使用较新算法的哈希也是如此。

    【讨论】:

    • 呃,不知道我是如何掩盖“算法”部分的。它也在 password_hash 文档中说。谢谢!
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多