vanilla / garden-password
提供标准的密码哈希接口以及支持常见框架中的密码哈希。
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: ~6.0
Suggests
- php: >=5.5.0
- ircmaxell/password-compat: ~1.0
This package is auto-updated.
Last update: 2024-09-19 19:12:36 UTC
README
Garden Password 实现了各种密码哈希算法的通用接口。
为什么我们制作了 Garden Password
尽管行业似乎已经将 bcrypt 作为安全密码哈希的标准,但仍有大量遗留系统存在。当你想要从这些遗留系统中导入数据时,你需要某种方式来连接密码哈希,以便用户可以登录而无需重置密码。
安装
Garden Password 需要 PHP 5.4 或更高版本。如果你想在 PHP 5.5 之前使用 PhpPassword 对象,可以引入 password-compat 包。
Garden Password 遵循 PSR-4 标准,可以使用 composer 安装。只需将 vanilla/garden-password
添加到你的 composer.json。
{ "require": { "vanilla/garden-password": "~1.0" } }
密码接口
PasswordInterface 是所有密码算法遵循的基本接口。你应该为此接口进行类型提示,然后为你的应用程序选择合适的实现。我们建议使用 PhpPassword。这个 PasswordInterface 接口非常简单,只有三个方法。
hash()
public string hash(string $password)
哈希明文密码。这将返回一个适合存储在数据库中的一对一、加盐的哈希。一旦你有了这个哈希,你应该丢弃明文密码。
needsRehash()
public string needsRehash(string $hash)
检查现有的密码哈希是否需要重新哈希。当算法有后来修复的安全问题时,需要重新哈希密码。通常在用户登录并拥有他们的明文密码时调用此方法。首先检查密码是否与现有哈希匹配,然后检查是否需要更新。如果你需要重新哈希,则再次哈希明文密码并将新哈希存储在数据库中。这样,你可以逐渐提高你系统的安全性。
verify()
public bool verify(string $password, string $hash)
验证密码与存储的哈希是否匹配。这是你检查用户登录时密码的方法。
贡献
如果你想要帮助我们构建这个库,我们将非常感激。以下是一些你可以提供帮助的绝佳方式
-
发送包含新哈希算法的拉取请求。如果你了解另一个系统并且知道其密码是如何工作的,请发送给我们一个实现。
-
如果你知道你想要添加的密码哈希算法,但不想创建拉取请求,这也是可以的。创建一个问题,并给我们算法的详细信息,如果可能,我们将实现该算法。
-
发送现有算法的示例密码/哈希对。如果你在一个带有遗留密码的系统上运行,你可以发送一些示例密码及其相关哈希。然后我们可以将这些添加到我们的单元测试中。不要发送你实际使用的密码!只需创建一个临时密码并发送它及其哈希。
注意:我们不能从示例密码和哈希中逆向工程密码哈希算法。