4

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

我尝试搜索此错误的任何实例,我发现唯一相关的是 Laravel 论坛中的这篇不详细的帖子:

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)
4

2 回答 2

5

此算法仅在 PHP 编译时支持 Argon2 时可用。-密码哈希

如果您想在可用时使用它,我建议您检查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));
}
于 2019-06-07T15:53:12.797 回答
2

我设法通过安装模块钠来消除警告。

Debian / Ubuntu的:sudo apt-get install php-sodium

centos/rhel:sudo yum install php-sodium

于 2019-12-18T12:47:52.517 回答