2013-06-29 21 views
3

由于PHP 5.5.0什么了!hash_pbkdf2 VS password_hash PHP函数

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

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

  3. 我们应该等待一些更新或者是他们已经安全的5.5.0

  4. 使用我们应该仍然使用PHPass等框架或这些新的PHP 5.5的功能是够了, /或者更多的未来证明?

回答

6
  1. 的是优选的,因为它们更自动化的过程中,如选择一个盐,验证口令和重散列password hashing functions(如password_hash)。

  2. password_verify函数将自动检测用于生成散列的算法,所以没有兼容性问题。

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

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

4

新功能password_hash()仅仅是围绕着功能crypt()的包装,并简化其使用。 crypt函数返回这种形式的散列:

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

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

所以这个新的密码API肯定是散列你的密码的最有前途的方法。您甚至可以在compatibility pack的旧版PHP中使用它。