密码哈希 API 为 crypt() 提供了一个易于使用的包装器以及其他一些密码哈希算法,以便以安全的方式轻松创建和管理密码。

安装

无需安装即可使用这些功能。这些函数是 PHP 核心的一部分。

但是,要启用 Argon2 密码散列,必须使用 --with-password-argon2[=DIR] 配置选项构建支持 libargon2 的 PHP。

运行时配置

此扩展没有在 php.ini 中定义配置指令。

PHP 密码哈希函数

函数说明
password_algos()获取可用的密码哈希算法 ID。
password_get_info()返回有关给定哈希的信息。
password_hash()创建密码哈希。
password_needs_rehash()检查给定的哈希是否与给定的选项匹配。
password_verify()验证密码是否匹配哈希值。

PHP 密码哈希预定义常量

下面的常量始终作为一部分提供PHP 核心的密码。

PASSWORD_BCRYPT(字符串)

PASSWORD_BCRYPT 用于使用 CRYPT_BLOWFISH 算法创建新的密码哈希值。

这将始终导致使用"$2y$"加密格式的哈希,该格式始终为 60 个字符宽。

支持的选项:

  • salt(字符串) - 手动提供在散列密码时使用的盐。这将覆盖并阻止自动生成盐。

    如果省略,将通过 password_hash( ) 对于每个经过哈希处理的密码。这是预期的操作模式,从 PHP 7.0.0 开始,salt 选项已被弃用。

  • cost (int) - 表示应使用的算法成本。

    如果省略,将使用默认值 10。这是一个不错的基准成本,但您可能需要考虑根据您的硬件增加它。

PASSWORD_ARGON2I(字符串)

PASSWORD_ARGON2I 用于使用 Argon2i 算法创建新的密码哈希值。

支持的选项:

  • memory_cost (int) - 可能的最大内存(以字节为单位)用于计算 Argon2 哈希值。默认值为 PASSWORD_ARGON2_DEFAULT_MEMORY_COST。
  • time_cost (int) - 计算 Argon2 哈希所需的最长时间。默认值为 PASSWORD_ARGON2_DEFAULT_TIME_COST。
  • threads (int) - 用于计算 Argon2 哈希值的线程数。默认值为 PASSWORD_ARGON2_DEFAULT_THREADS。仅适用于 libargon2,不适用于 libsodium 实现。

自 PHP 7.2.0 起可用。

PASSWORD_ARGON2ID(字符串)

PASSWORD_ARGON2ID 用于使用 Argon2id 算法创建新的密码哈希值。它支持与 PASSWORD_ARGON2I 相同的选项。

从 PHP 7.3.0 起提供。

PASSWORD_ARGON2_DEFAULT_MEMORY_COST (int)

默认金额尝试计算哈希时将使用的内存数量(以字节为单位)。

从 PHP 7.2.0 起提供。

PASSWORD_ARGON2_DEFAULT_TIME_COST(int)

尝试计算哈希所花费的默认时间量。

自 PHP 7.2.0 起提供。

PASSWORD_ARGON2_DEFAULT_THREADS ( int)

Argon2lib 将使用的默认线程数。它不适用于 libsodium 实现。

自 PHP 7.2.0 起提供。

PASSWORD_DEFAULT(混合)

默认值如果未提供算法,则用于散列的算法。

请注意,随着时间的推移,此常数可能会发生变化。因此,生成的哈希值的长度可能会发生变化。因此,使用PASSWORD_DEFAULT,那么生成的哈希值应该以可以存储超过60个字符的方式存储(建议宽度为255)。

该常量的值:

  • PHP 5.5.0 - PASSWORD_BCRYPT