由于PHP 5.5.0现已推出,
哪一个更好用(安全性,便携性,面向未来)?
它说密码_hash() PASSWORD_DEFAULT 可能会在每个完整版本(+1.0或+0.1)中发生变化,那么我们如何使用以前的DEFAULT方法哈希密码和新的默认值?这是否意味着在用户更改密码之前,数据库中已经具有哈希密码的PHP 5.5脚本将无法在PHP 5.6上运行?怎么样 COST 更改 (我想知道服务器是否可以更新到php v5.6,或者网站管理员可能会更改主机提供商(然后为较弱/较强的服务器更改COST),对当前用户没有任何问题)
我们应该等待一些更新,还是已经可以安全地在5.5.0中使用
我们是否还应该使用PHPass等框架,或者这些新的PHP 5.5功能是否足够和/或更具未来性?
答案 0 :(得分:6)
password hashing functions(例如password_hash
)是首选,因为它们会自动执行更多过程,例如选择盐,验证密码和重新散列。
password_verify
函数会自动检测用于生成哈希的算法,因此没有兼容性问题。
这些函数在PHP的发布版本中,所以它们应该没问题。
如果您的代码需要在早于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一起使用。