Intereting Posts
Codeigniter: Список таблиц с использованием javascript и php Проблема с будущей страницей WordPress (не отображается) Как извлечь данные из JSON с помощью PHP? Извлечение данных из базы данных на основе ввода пользователем Недопустимый синтаксический анализ JSON с использованием PHP Поиск количества дней между двумя датами CakePHP DebugKit / Plugins веб-сайт не найден SQL Query для разделения данных одного столбца на несколько столбцов «Сериализация« SimpleXMLElement »не допускается. Вставка ошибки в значение xml-кода сеанса Laravel 5 mix app.js создание файла Нужна помощь в Regex, подстрока между двумя скобками Есть ли способ переопределить подсказку типа к классу потомков при расширении абстрактного класса? Аутентификация с использованием нескольких таблиц в Laravel 5.2 Параметры привязки PHP по умолчанию и значение по умолчанию Как я могу загрузить изображение с помощью ajax в codeigniter?

Метод проверки Zend \ Crypt \ Password \ BCrypt

Я использую Zend\Crypt\Password\Bcrypt для хранения паролей, зашифрованных в базе данных. Но теперь я посмотрел немного ближе, и, похоже, я не понимаю метод проверки этого класса :

 /** * Verify if a password is correct against a hash value * * @param string $password * @param string $hash * @throws Exception\RuntimeException when the hash is unable to be processed * @return bool */ public function verify($password, $hash) { $result = crypt($password, $hash); return Utils::compareStrings($hash, $result); } 

Функциональность в соответствии с комментарием «Проверить правильность пароля относительно хеш-значения»

Но когда я проверяю функцию php crypt, она вызывает второй аргумент, это необязательная строка $salt а не $hash строка для проверки.

Как я читаю это: сначала он использует переданный $hash чтобы зашифровать $password который мы хотим проверить, и затем он сравнивает тот же $hash он использовал в качестве соли с зашифрованным $result !?

Так что мне здесь не хватает? Либо php-doc неверен, либо я не понимаю, что происходит, или что-то пропустил в документах.

Bcrypt hash имеет хорошо документированную структуру, например, этот хеш:

 $2y$10$aPk2mEEIkGonq6/JGr0OKOhYOdgomu61ARBjDLgb0UmHM4L8f7Hxe 

String $2y$ – префикс, 10 – стоимость, aPk2mEEIkGonq6/JGr0OKO – соль (128 бит, base64, закодированные 22 символа) и hYOdgomu61ARBjDLgb0UmHM4L8f7Hxe – результат хэша.

функция crypt распознает этот формат и использует соответствующую часть его как соль, поэтому нет никакой проблемы передать весь хеш в качестве второго параметра.