最佳解决方案:您应该使用 PHP 5.5 内置的密码库。他们为 PHP 5.3 和 5.4 发布了一个向后兼容的版本,称为password_compat。但是请注意,您需要 5.3.7 或更高版本。5.3.7 之前的 bcrypt 存在安全问题,这意味着新库将无法工作。
如果您使用的是 5.3.7 之前的版本,那么下一个最佳选择是同一作者的Password Lib 。但我建议升级 PHP 会是更好的选择。
安装
只需下载它们,将它们复制到您的站点文件夹,然后将它们的主文件包含在您的代码中即可安装这两个库 - 即require('password.php');
.
如果您使用 Composer,也可以选择通过 Composer 安装。
用法(假设您使用 password_compat):
创建密码:
$hash = password_hash($password, PASSWORD_BCRYPT);
要验证密码:
if (password_verify($password, $hash)) {
/* Valid */
} else {
/* Invalid */
}
这基本上就是您需要知道的全部内容。该库为您处理所有其他细节,例如加盐密码等。
[编辑]如果您需要根据您的评论更改算法“成本”,则在password_hash()
调用中添加一个附加参数以指定它,如下所示:
password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));
我在上面链接的下载页面上提供了完整的文档。
使用 password_compat 库的真正好处是,它经过专门设计,具有与 PHP 5.5 标准一样内置于 PHP 中的相同 API 和功能。因此,如果您在使用 PHP 5.3 或 5.4 时使用 password_compat,那么当您迁移到 PHP 5.5 时,您的系统中已经有了正确的代码来使用新的内置密码功能。唯一的区别是您不需要include
图书馆。