密码哈希 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