hash_pbkdf2 vs password_hash PHP functions


hash_pbkdf2 vs password_hash PHP functions

由于PHP 5.5.0现已推出,

  1. 哪个更适合使用(安全性、便携性、经得起未来考验)?

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

  3. 我们应该等待一些更新吗?或者它们在5.5.0 中使用是否已经安全

  4. 我们应该仍然使用PHPass等框架,还是这些新的PHP 5.5函数就足够了和/或更经得起未来考验?

  1. 密码散列函数(如password_hash)是首选的,因为它们自动化了更多的过程,如挑选盐、验证密码和重新散列。

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

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

  4. 如果您的代码需要在5.5之前的PHP版本上运行,请使用PHPass或password_compat等填充程序。否则,请使用密码哈希函数。

新函数password_hash()只是函数crypt()的包装器,简化了它的使用。crypt函数返回以下形式的散列:

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

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

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