【问题标题】:Which is/are the most secure password hash algorithm(s) in PHP? [duplicate]PHP 中哪个/是最安全的密码哈希算法? [复制]
【发布时间】:2015-09-09 16:16:58
【问题描述】:

PHP 中哪些是最安全的密码哈希算法?

速度无关紧要,因为我在固定时间(而不是固定的迭代次数)内迭代哈希。我感兴趣的是数学强度。

我的直觉告诉我这是漩涡,是其中最大和最慢的。那或 SHA-512。专家推荐哪个?

是否有任何其他算法提供超过 512 位 哈希?

【问题讨论】:

  • 使用password_hash()。这就是你需要知道的一切。不要不要重新发明轮子。

标签: php algorithm security encryption hash


【解决方案1】:

使用函数password_hash()。如果你让它(通过指定PASSWORD_DEFAULT),它将选择推荐的算法,目前是BCrypt。如果算法发生变化,您不必更改代码。如果您愿意,您也可以使用常量PASSWORD_BCRYPT 明确选择此算法,但这与在未来版本中可用时自动更新为更好算法的意图背道而驰。

您可以使用password_verify() 来验证密码。

PHP 会将使用的算法和盐添加到哈希中,因此它会知道验证所需的所有信息。这样,当新的算法在新版本的 PHP 中可用时,它们将被自动使用,并且这些密码将具有更强的哈希值。

您可以使用password_needs_rehash() 来检查密码是否需要重新散列,如果默认值发生更改。

如果密码有效,您可以重新散列并存储它。这样,当用户登录时,您将使用较弱的哈希值自动更新旧密码。

【讨论】:

  • 为了跟进这一点,您使用 BCrypt 等算法的原因是它是为密码保护而设计的,与 SHA 算法不同。它是专门为计算缓慢而设计的。这对用户登录来说不是问题,但它比暴力破解 SHA 慢得多。
【解决方案2】:

scrypt 可以说是最安全的散列算法,因为它受 RAM 限制,因此难以并行化。但是,当前许多系统(如果有的话)并不原生支持它。

bcrypt 是下一个。它没有当前已知的加密弱点,得到广泛支持,并且具有广泛可调的工作因子。这也是password_hash()的当前默认算法。

其他一切都低于标准。

除非你有密码学学位,否则不要推出你自己的散列或密码方案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
相关资源
最近更新 更多