ircmaxell/password-compat

这是一个用于提议的简化密码散列算法的兼容性库:https://wiki.php.net/rfc/password_hash

v1.0.4 2014-11-20 16:49 UTC

This package is auto-updated.

Last update: 2024-09-20 00:58:59 UTC


README

Build Status Code Climate

此库旨在与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));

这与默认值相同。成本范围从431。我建议您使用最高的成本,同时保持响应时间合理(对于散列,我针对0.1到0.5秒,具体取决于使用情况)。

还支持另一个算法名称

    PASSWORD_DEFAULT

这将使用PHP当前可用的最强算法。目前,这与指定PASSWORD_BCRYPT相同。但在PHP的将来版本中,它可能会更新为使用更强的算法(如果引入了的话)。如果BCRYPT算法出现问题,它也可以更改。请注意,如果您使用此选项,强烈建议将其存储在VARCHAR(255)列中,以避免未来算法增加生成散列长度时出现截断问题。

在将其存储之前,您应该检查password_hash的返回值非常重要,因为如果遇到错误,可能会返回falsenull

验证密码散列

要验证由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]