Предупреждение PHP: использование неопределенной константы PASSWORD_ARGON2ID при использовании password_hash() в php 7.3

Недавно я установил PHP 7.3.6 через веб-интерфейс Plesk для копии разработки веб-приложения, так как я намерен обновить нашу производственную среду с 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

Приложение размещено на общем vps с MediaTemple. 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)

person Matt Aikens    schedule 07.06.2019    source источник
comment
Этот алгоритм доступен, только если PHP был скомпилирован с поддержкой Argon2. - php.net/manual/en/function.password-hash.php   -  person Dharman    schedule 07.06.2019
comment
Возможный дубликат Как мне использовать алгоритм Argon2 с password_hash ?   -  person miken32    schedule 07.06.2019


Ответы (2)


Этот алгоритм доступен, только если 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));
}
person Dharman    schedule 07.06.2019
comment
Спасибо. Я предполагал, что Plesk скомпилирует PHP с поддержкой Argon2 к тому времени, когда они выпустят 7.3, но я думаю, что это не так. Любой, кто использует Plesk для установки/обновления PHP, не сможет использовать Argon2, если только он не перекомпилирует PHP 7.2/7.3 с параметром --with-password-argon2. - person Matt Aikens; 07.06.2019
comment
+1 ну это хорошее решение, если кто-то не хочет застревать и тратить время на установку aragon2i. - person Hafiz Siddiq; 14.09.2019
comment
могу подтвердить, что вам нужен как минимум PHP 7.3 для поддержки Argon2 - person OzzyTheGiant; 24.06.2020

Мне удалось избавиться от предупреждения, установив модуль натрия.

дебиан/убунту: sudo apt-get install php-sodium

центос/рхел: sudo yum install php-sodium

person Rizky Arlin    schedule 18.12.2019
comment
У меня это не сработало, после установки php-sodium все еще жалуется на PASSWORD_ARGON2ID - person spacebiker; 13.10.2020
comment
Я, наконец, решил это, используя 7.1, так как мне действительно не нужно обновляться до 7.3, спасибо - person spacebiker; 15.10.2020