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

Pro*_*irl 8 php passwords hash bcrypt password-encryption

好的,我终于理解了bcrypt,它是如何工作的,以及如何将它存储在数据库中,所以我几乎要好好去.现在的问题是选择使用哪种bcrypt实现与PHP 5.3.

我疯狂地看着所有不同的解决方案,我不确定哪一个是最推荐和最安全的,所以我再次转向你们.

以下是我发现的:

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

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

3)/sf/answers/443591501/

4)......别的什么?

这些可以互换,还是产生不同的哈希?我想认为,既然它们都是"bcrypt",他们会产生相同的结果,但我不知道(我测试1)2)以上,他们似乎是可互换的,因为所生产的散列1)上确认2)).

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

Spu*_*ley 18

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

如果您使用的是5.3.7之前的版本,那么下一个最佳选项是同一作者的密码库.但我建议升级PHP而不是更好的选择.

安装

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

如果您正在使用它,也可以选择通过Composer进行安装.

用法(假设你要使用password_compat):

要创建密码:

$hash = password_hash($password, PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)

验证密码:

if (password_verify($password, $hash)) {
    /* Valid */
} else {
    /* Invalid */
}
Run Code Online (Sandbox Code Playgroud)

这基本上就是你需要知道的.图书馆为您处理所有其他详细信息,例如腌制密码等.

[编辑]如果您需要根据评论更改算法"费用",则在password_hash()调用中添加其他参数以指定它,如下所示:

password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));
Run Code Online (Sandbox Code Playgroud)

我在上面链接的下载页面上提供了完整的文档.

使用password_compat库的好处在于它专门设计为具有与PHP 5.5中标准的PHP相同的API和功能.因此,如果您在使用PHP 5.3或5.4时使用password_compat,那么当您转到PHP 5.5时,您已经拥有了在系统中使用新的内置密码功能的正确代码.唯一的区别是你不需要include图书馆.

  • @Programmer - 它是兼容性库的名称.如果你以后切换到PHP 5.5,你可以简单地删除`require('password.php')`你应该没问题,PHP 5.5中的函数将具有相同的名称和相同的参数. (2认同)