较旧的php版本的password_compat

PiT*_*ber 12 php security passwords hash php-password-hash

PHP 5.5将支持密码功能password_hash()password_verify().还有一个文件要在> 5.3.7中添加此功能.

我的问题是我目前正在运行debian软件包5.3.3-7 + squeeze14.

有没有办法让这个旧的PHP版本使用此功能?

irc*_*ell 27

所以,在我开始之前,让我明确一点.我是相关库的作者(以及5.5的补丁).

话虽如此,其他人提到的是绝对正确的.5.3.7是最低版本的原因是所有版本之前的bcrypt实现中都有一个错误,可能导致密码使用高字节字符丢失(代码点> = 128).

这是5.3.7作为最低版本的主要原因.我强烈建议升级到至少5.3.7,但最好是最新的(在不太旧的版本中发现了许多重要的安全问题).

现在,如果你坚持使用较低版本,你会怎么做?您可以分叉库并调整$2y$$2a$.那至少会让你上班.以这种方式生成的密码将在未来版本中可移植(该库旨在能够验证旧crypt()密码).

但是,我建议你不要这样做.只需升级到更新版本的PHP即可.这并不难(有dotdeb的 deb软件包可以为你做).

如果你真的被困在旧版本上,我会建议你使用专为此设计的库.像我的PasswordLibPhPass(请注意,您应该只使用该库的链接版本,github上还有其他几个完全不同的版本).


Lei*_*igh 5

之所以将 5.3.7 设为最低版本,是因为crypt()在早期版本的 PHP 中使用 bcrypt的函数输出的结果与当前版本大不相同。

您可以自己查看结果:http: //3v4l.org/3cAZf

使用以下代码:

<?php
var_dump(crypt('rasmuslerdorf', '$2y$07$usesomesillystringforsalt$'));
Run Code Online (Sandbox Code Playgroud)

5.3.7 - 5.3.16、5.4.0 - 5.4.6 的输出

string(60) "$2y$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi"

4.3.0 - 4.3.11、4.4.0 - 4.4.9、5.0.0 - 5.0.5、5.1.0 - 5.1.6、5.2.0 - 5.2.17、5.3.2 - 5.3.6 的输出

字符串(13)“$ 25di0cl7EYZA”

5.3.0 - 5.3.1 的输出

字符串(13)“$ 2v4FKr10WzJ2”


Nik*_*kiC 5

PHP> = 5.3.7是必需的,因为固定的bcrypt算法2y包含在该版本中.2a对于具有US-ASCII范围之外的字节的密码,先前的算法被破坏.

您的5.3.3-7 + squeeze14版本很可能也包含此修复程序.分发通常保留在某个特定版本,但是后端安全修复程序(如此).

因此,您应该检查该算法是否可用,如果是,您可以安全地使用password_compat.

包的更改日志有点不清楚.它提到了2x添加,但没有说是否2y也被添加(但可能是).