ircmaxell / password-compat
这是一个用于提议的简化密码散列算法的兼容性库:https://wiki.php.net/rfc/password_hash
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-09-20 00:58:59 UTC
README
此库旨在与PHP 5.5中提供的password_*函数提供向前兼容性。
有关更多信息,请参阅RFC。
要求
此库需要 PHP >= 5.3.7
或包含$2y
修复的版本(例如,RedHat提供)。请注意,Debian的5.3.3版本不支持。
由于此版本问题,已删除运行时检查。要查看您的系统是否可用password_compat,请运行包含的version-test.php
。如果它输出“Pass”,则可以安全地使用此库。如果输出不是“Pass”,则不能使用。
如果您尝试在不支持的版本上使用password-compat,则创建或验证散列的尝试将返回false
。请注意此警告!
这是由于PHP 5.3.7之前的版本中BCRYPT实现存在一个安全问题。因此,强烈建议在使用此层之前升级到PHP的新版本。
安装
要安装,只需在lib
目录下require
password.php
文件。
您也可以通过使用Packagist存档通过Composer
进行安装。
使用方法
创建密码散列
要从密码创建散列,请简单地使用password_hash
函数。
$hash = password_hash($password, PASSWORD_BCRYPT);
请注意,我们选择的算法是PASSWORD_BCRYPT
。这是当前支持的算法中最强的。这是BCRYPT
加密算法。结果是一个60个字符的散列。
BCRYPT
还允许您在选项数组中定义一个cost
参数。这允许您更改算法的CPU成本
$hash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 10));
这与默认值相同。成本范围从4
到31
。我建议您使用最高的成本,同时保持响应时间合理(对于散列,我针对0.1到0.5秒,具体取决于使用情况)。
还支持另一个算法名称
PASSWORD_DEFAULT
这将使用PHP当前可用的最强算法。目前,这与指定PASSWORD_BCRYPT
相同。但在PHP的将来版本中,它可能会更新为使用更强的算法(如果引入了的话)。如果BCRYPT算法出现问题,它也可以更改。请注意,如果您使用此选项,强烈建议将其存储在VARCHAR(255)
列中,以避免未来算法增加生成散列长度时出现截断问题。
在将其存储之前,您应该检查password_hash
的返回值非常重要,因为如果遇到错误,可能会返回false
或null
。
验证密码散列
要验证由password_hash
创建的散列,只需调用
if (password_verify($password, $hash)) { /* Valid */ } else { /* Invalid */ }
这就完成了。
重新散列密码
不时,您可能需要更新散列参数(算法、成本等)。因此,有一个函数可以确定是否需要重新散列
if (password_verify($password, $hash)) { if (password_needs_rehash($hash, $algorithm, $options)) { $hash = password_hash($password, $algorithm, $options); /* Store new hash in db */ } }
安全漏洞
如果您发现了安全漏洞,请直接联系作者,邮箱地址为:[email protected]。