8

好的,我终于了解了 bcrypt,它是如何工作的,以及如何将它存储在数据库中,所以我几乎可以开始了。现在的问题是选择与 PHP 一起使用的 bcrypt 实现5.3

看着所有不同的解决方案,我快疯了,我不确定哪一个是最推荐和最安全的,所以我再次求助于你们。

以下是我找到的:

1) https://gist.github.com/marcoarment/1053158

2) http://www.openwall.com/phpass/

3) https://stackoverflow.com/a/6337021/869849

4) ...其他的?

这些是可互换的,还是产生不同的哈希?我想认为,由于它们都是“bcrypt”,它们会产生相同的结果,但我不确定(我在上面测试过1)2)它们似乎是可以互换的,因为1)check out on产生的哈希值2))。

那么哪个是 PHP 的推荐解决方案5.3

4

2 回答 2

18

最佳解决方案:您应该使用 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图书馆。

于 2013-03-27T16:52:39.130 回答
1

如果您尝试更新到 PHP 5.5,请在迁移前查看此内容 本手册有非常有趣的要点,应在升级前阅读

从 5.3 到 5.4 的更改以及发行说明的向后不兼容页面

http://php.net/manual/en/migration54.incompatible.php

于 2014-09-27T10:04:48.983 回答