对于PHP 5.3,建议使用哪种bcrypt实现?

时间:2013-03-27 16:18:33

标签: php hash passwords bcrypt password-encryption

好的,我终于明白了bcrypt,它是如何工作的,以及如何将它存储在数据库中,所以我几乎要好好去。现在的问题是选择使用哪个bcrypt实现与PHP 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)签出的2)生成的哈希值。

那么推荐的PHP 5.3解决方案是什么?

2 个答案:

答案 0 :(得分:18)

最佳解决方案:您应该使用PHP 5.5内置的密码库。他们发布了一个名为password_compat的PHP 5.3和5.4的向后兼容版本。但请注意,您需要5.3.7或更高版本。 5.3.7之前的bcrypt存在安全问题,这意味着新的库无法正常工作。

如果您使用的是5.3.7之前的版本,则同一作者的下一个最佳选项是Password Lib。但我建议升级PHP,这将是更好的选择。

<强>安装

只需下载它们,将它们复制到您的站点文件夹,并将其主文件包含在您的代码中即可安装这两个库 - 即require('password.php');

如果您正在使用它,也可以选择安装via 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库。

答案 1 :(得分:2)

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

从5.3到5.4以及发行说明的向后不兼容页面有变化

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