3

由于 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 功能就足够了和/或更多的未来证明?

4

2 回答 2

6
  1. 密码散列函数(例如password_hash)是首选,因为它们可以自动执行更多过程,例如挑选盐、验证密码和重新散列。

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

  3. 这些函数在 PHP 的发布版本中,所以它们应该可以很好地使用。

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

于 2013-06-29T15:53:44.377 回答
4

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

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

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

因此,这个新的密码 API 无疑是对您的密码进行哈希处理的最面向未来的方法。您甚至可以将它与带有兼容性包的旧 PHP 版本一起使用。

于 2013-06-29T18:45:21.713 回答