【问题标题】:hash_pbkdf2 vs password_hash PHP functionshash_pbkdf2 vs password_hash PHP函数
【发布时间】:2013-06-29 12:36:00
【问题描述】:
由于 PHP 5.5.0 现已推出,
哪个更好用(安全性、可移植性、面向未来)?
它说 password_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 函数就足够了和/或更多的未来证明?
【问题讨论】:
标签:
php
security
php-password-hash
【解决方案2】:
新函数password_hash() 只是函数crypt() 的包装,并简化了它的使用。 crypt 函数返回这种形式的哈希:
algorithm (BCrypt)
| cost factor (10)
| | salt hash-value
| | | |
-- -- -----------------------------------------------------
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
这意味着算法和所有参数都包括在内,这是将输入的密码与存储的哈希值进行比较所必需的。即使默认算法发生变化,password_verify()函数也能识别使用的算法,并可以使用旧算法验证密码。
因此,这个新的密码 API 无疑是对您的密码进行哈希处理的最具前瞻性的方法。您甚至可以通过 compatibility pack 将它与旧 PHP 版本一起使用。