PHP 警告:在 php 7.3 中使用 password_hash() 时使用未定义常量 PASSWORD_ARGON2ID

PHP Warning: Use of undefined constant PASSWORD_ARGON2ID when using password_hash() in php 7.3

我最近通过 Plesk 的 Web GUI 安装了 PHP 7.3.6 作为 Web 应用程序的开发副本,因为我打算将我们的生产环境从 php 7.0 更新到 7.3。我决定借此机会将我们的密码散列从 PBKDF2 升级到 Argon2ID,因为 PHP 核心已经包含了它。我很惊讶地收到一条警告,指出 PASSWORD_ARGON2ID 常量未定义,因为我知道它是在 php 7.3.0.

中添加的

我尝试搜索此错误的任何实例,我发现唯一相关的是 Laravel 论坛中未详细说明的 post:

https://laracasts.com/discuss/channels/laravel/use-of-undefined-constant-password-argon2id-assumed-password-argon2id?page=1

该应用程序托管在与 MediaTemple 共享的 vps 上。 Centos 7,使用 nginx 作为 Apache 的反向代理。它是开发 运行 7.3.6 的子域,主域是 运行 应用程序的生产版本 7.0.33。

$this->password = password_hash('password123', PASSWORD_ARGON2ID, array('time_cost' => 10, 'memory_cost' => '2048k', 'threads' => 6));

我希望定义 PASSWORD_ARGON2ID 常量,但它被报告为未定义:

Use of undefined constant PASSWORD_ARGON2ID - assumed 'PASSWORD_ARGON2ID' (this will throw an Error in a future version of PHP)

此算法仅在 PHP 编译时支持 Argon2 时可用。 - password_hash

如果您想在它可用时使用它,我建议您检查 defined 或回退到默认算法。

if(defined('PASSWORD_ARGON2ID')) {
    $hash = password_hash('password123', PASSWORD_ARGON2ID, array('time_cost' => 10, 'memory_cost' => '2048k', 'threads' => 6));
} else {
    $hash = password_hash('password123', PASSWORD_DEFAULT, array('time_cost' => 10, 'memory_cost' => '2048k', 'threads' => 6));
}

我通过安装模块 sodium 设法摆脱了警告。

debian / ubuntu: sudo apt-get install php-sodium

centos/rhel: sudo yum install php-sodium