Phpodium_crypto_pwhash_str_verify () не работает

Я пытаюсь понять, как использовать новые функции libsodium в php7.2, но по какой-то причине мне кажется, что sodium_crypto_pwhash_str_verify() не работает должным образом.

Я решил использовать приведенный пример в их документации: https://paragonie.com/blog/2017/06/libsodium-quick-reference-quick-comparison-similar-functions-and-which-one-use#crypto-pwhash-sample-php

Пример кода из самого libsodium:

Note: I've contacted the author about the sample code and it has now been fixed! So the example below is outdated. (2018-05-30)

(единственная корректировка, которую я сделал, это $passwort = "test" и echos)

<?php
$password = "test"; // by me

/* This uses Argon2i with two numeric constants that correspond to
 * the number of passes (OPSLIMIT) and the amount of memory to use
 * (MEMLIMIT). A higher OPSLIMIT helps against CPU attacks, while a
 * higher MEMLIMIT helps against GPU attacks.
 */
$storeInDatabase = sodium_crypto_pwhash_str(
    $password, 
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);

/* Once that's stored, you can just test against the hash like so: */
if (sodium_crypto_pwhash_str_verify($password, $storeInDatabase)) {
    /* Logged in! */
    echo "works!"; // by me
} else {
    /* Incorrect password. */
    echo "failed!"; // by me
}

Поскольку я хеширую и проверяю те же $password и $storeInDatabase, это всегда должно выводить "works!", но это не так.

Что я здесь делаю не так? К сожалению, на php.net пока нет полезной документации по функциям sodium.

Для справки:

http://php.net/manual/en/function.sodium-crypto-pwhash-str.php

http://php.net/manual/en/function.sodium-crypto-pwhash-str-verify.php

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
496
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас $password и $storeInDatabase неправильно

Так должно быть:

if (sodium_crypto_pwhash_str_verify($storeInDatabase,$password)) {

Из документов:

bool sodium_crypto_pwhash_str_verify ( string $hash , string $password )

Вы правы - так оно и работает. Хотя технически это не я привожу неверные аргументы, а пример кода libsodium! Думаю, я отправлю им сообщение об этом :)

Katai 29.05.2018 14:12

Другие вопросы по теме