hash_pbkdf2 vs password_hash PHP函数

时间:2013-06-29 12:36:00

标签: php security php-password-hash

由于PHP 5.5.0现已推出,

  1. 哪一个更好用(安全性,便携性,面向未来)?

  2. 它说密码_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功能是否足够和/或更具未来性?

2 个答案:

答案 0 :(得分:6)

  1. password hashing functions(例如password_hash)是首选,因为它们会自动执行更多过程,例如选择盐,验证密码和重新散列。

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

  3. 这些函数在PHP的发布版本中,所以它们应该没问题。

  4. 如果您的代码需要在早于5.5的PHP版本上运行,请使用PHPass或垫片,例如password_compat。否则,请使用密码散列函数。

答案 1 :(得分:4)

新函数password_hash()只是函数crypt()的包装,简化了它的用法。 crypt函数返回以下形式的哈希:

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

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

因此,这个新密码API肯定是散列密码的最具前瞻性的方法。您甚至可以将它与旧版PHP版本compatibility pack一起使用。