【问题标题】:hash_pbkdf2 vs password_hash PHP functionshash_pbkdf2 vs password_hash PHP函数
【发布时间】:2013-06-29 12:36:00
【问题描述】:

由于 PHP 5.5.0 现已推出,

  1. 哪个更好用(安全性、可移植性、面向未来)?

  2. 它说 password_hash() PASSWORD_DEFAULT 可能会在每个完整版本(+1.0 或 +0.1)中更改,那么我们如何使用以前的 DEFAULT 方法散列密码和新的默认值?这是否意味着在用户更改密码之前,数据库中已散列密码的 PHP 5.5 脚本将无法在 PHP 5.6 上运行? COST 变化呢(我想知道服务器是否可以更新到 php v5.6,或者网站管理员可能会更改托管服务提供商(然后为更弱/更强的服务器更改 COST),对当前用户没有任何问题)

  3. 我们应该等待一些更新还是它们已经可以安全地在 5.5.0 中使用了

  4. 我们还应该使用 PHPass 等框架,还是这些新的 PHP 5.5 函数就足够了和/或更多的未来证明?

【问题讨论】:

    标签: php security php-password-hash


    【解决方案1】:
    1. 首选password hashing functions(例如password_hash),因为它们可以自动执行更多过程,例如挑选盐、验证密码和重新散列。

    2. password_verify 函数会自动检测用于生成哈希的算法,因此不存在兼容性问题。

    3. 这些函数在 PHP 的已发布版本中,所以应该可以使用。

    4. 如果您的代码需要在低于 5.5 的 PHP 版本上运行,请使用 PHPass 或诸如 password_compat 之类的 shim。否则,请使用密码哈希函数。

    【讨论】:

      【解决方案2】:

      新函数password_hash() 只是函数crypt() 的包装,并简化了它的使用。 crypt 函数返回这种形式的哈希:

       algorithm (BCrypt)
       |  cost factor (10)
       |  |  salt                  hash-value
       |  |  |                     |
       -- -- -----------------------------------------------------
      $2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
      

      这意味着算法和所有参数都包括在内,这是将输入的密码与存储的哈希值进行比较所必需的。即使默认算法发生变化,password_verify()函数也能识别使用的算法,并可以使用旧算法验证密码。

      因此,这个新的密码 API 无疑是对您的密码进行哈希处理的最具前瞻性的方法。您甚至可以通过 compatibility pack 将它与旧 PHP 版本一起使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 2014-05-24
        相关资源
        最近更新 更多