#php
Вопрос:
Для функции PHP password_hash в руководстве говорится, что передача количества потоков «Доступна только в том случае, если PHP использует libargon2, а не с реализацией libsodium»..
Будет выдана ошибка, если опция потока установлена, когда она недоступна.
Что касается кода библиотеки, как я могу определить во время выполнения, доступен ли параметр потока?
Комментарии:
1. Вы получаете сообщение об ошибке, когда указываете
threads
настройку, но ее нельзя использовать?2. @JaredFarrish Расширения нет; функция является частью ядра PHP .
3. @Olivier Удален, если это не загруженное расширение (потому что это PHP, построенный с библиотекой C, которая не зарегистрирована как расширение).
Ответ №1:
PASSWORD_ARGON2_DEFAULT_THREADS
Константа определяется только при использовании libargon2:
ПАРОЛЬ_ARGON2_DEFAULT_ПОТОКИ По умолчанию определяет количество потоков, которые будет использовать Argon2lib. Недоступно с реализацией libsodium.
Таким образом, вы можете просто проверить, существует ли константа:
if(defined('PASSWORD_ARGON2_DEFAULT_THREADS'))
{
// Set the number of threads
...
}
Ответ №2:
Проверьте, загружено ли расширение, и удалите опцию, если нет.
function hash_password(
string $password,
string | int | null $algo,
array $options = []
): string {
if (!extension_loaded('libargon2') amp;amp; isset($options['threads'])) {
unset($options['threads']);
}
return password_hash($password, $algo, $options);
}
Комментарии:
1. Дайте мне знать , если загруженное имя расширения не
libargon2
указано, я не знаю этого наверняка.2. Расширения libargon2 не существует. Эта функция является частью ядра PHP .
3. @Оливье, что это значит? Однако, чтобы включить хэширование паролей Argon2, PHP должен быть построен с поддержкой libargon2 с использованием опции настройки —with-password-argon2[=DIR]. Похоже, загружается что-то еще, хотя
password_hash()
будет работать и без этого.4. Если PHP построен без libargon2, список доступных алгоритмов не будет включать
argon2i
иargon2id
.5. В чем заключается аргумент? Это
extension_loaded('libargon2')
не определитlibargon2
, загружено ли оно?