【问题标题】:PHP password_verify with differnet hashes [duplicate]具有不同哈希值的 PHP password_verify [重复]
【发布时间】:2017-11-22 09:41:12
【问题描述】:

我有一个关于 password_hash()password_verify() 的技术问题。

如果我通过password_hash() 多次运行示例密码,每次都会得到不同的结果。我想这是一件好事。

问题是如果实际哈希值不断变化,password_verify() 如何实际验证候选密码?

我在这里问这个问题是因为它与 PHP 相关。

对于那些认为这个问题重复的人:

这个问题不是链接问题的重复。我知道值会发生变化,并且 password_verify_ 可以使用它。

这是一个如何发生的问题。

【问题讨论】:

  • @Machavity:这不是重复的。
  • 它是重复的。 stackoverflow.com/questions/25167132/… 上有很多答案
  • @Machavity 不,链接的问题没有解释 password_verify 如何发挥它的魔力。其他链接的问题也没有。我确实读过它们。

标签: php hash passwords


【解决方案1】:

正如 manual page 中提到的 password_hash() 函数,

使用的算法、成本和盐作为散​​列的一部分返回。因此,验证哈希所需的所有信息都包含在其中。这允许 password_verify() 函数验证哈希,而无需单独存储盐或算法信息。

当相同的输入——算法、成本、盐和密码——被输入密码计算时,将生成相同的输出。因此,password_verify() 从原始计算中获取算法、成本和盐,使用正在测试的密码生成新的哈希,并将之前的结果与新生成的结果进行比较。如果匹配,则验证成功,否则为错误。

【讨论】:

  • 一个更好的例子是php.net/manual/en/faq.passwords.php。然后包括细分,php.net/manual/en/images/…
  • @chris85 OP 询问password_verify() 如何验证候选密码,不是举例。
  • ?是的...这就是password_hash 存储密码的方式,并且由于password_verify 可以比较它的格式...(这就是您的报价所说的)。
  • 这是正确的答案,我只想指出,盐是相同值的多个后续哈希不同的部分,导致每个哈希的唯一性。算法和成本通常不会改变。事实上,7.2 将是第一次使用 PASSWORD_DEFAULT 更改 password_hash 的算法
  • @FKEinternet 我已经阅读了链接,我知道它是独立的。我已将问题修改为它如何 进行验证?我想知道它是如何工作的。
猜你喜欢
  • 2014-12-30
  • 2016-03-31
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 2011-10-04
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多