vanilla/garden-password

提供标准的密码哈希接口以及支持常见框架中的密码哈希。

v1.2 2021-11-30 20:31 UTC

README

CI Packagist Version MIT License

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)

验证密码与存储的哈希是否匹配。这是你检查用户登录时密码的方法。

贡献

如果你想要帮助我们构建这个库,我们将非常感激。以下是一些你可以提供帮助的绝佳方式

  1. 发送包含新哈希算法的拉取请求。如果你了解另一个系统并且知道其密码是如何工作的,请发送给我们一个实现。

  2. 如果你知道你想要添加的密码哈希算法,但不想创建拉取请求,这也是可以的。创建一个问题,并给我们算法的详细信息,如果可能,我们将实现该算法。

  3. 发送现有算法的示例密码/哈希对。如果你在一个带有遗留密码的系统上运行,你可以发送一些示例密码及其相关哈希。然后我们可以将这些添加到我们的单元测试中。不要发送你实际使用的密码!只需创建一个临时密码并发送它及其哈希。

注意:我们不能从示例密码和哈希中逆向工程密码哈希算法。