Хеширование
Введение
Laravel Hash
фасад обеспечивает безопасное хеширование Bcrypt и Argon2 для хранения паролей пользователей. Если вы используете один из стартовых наборов приложений Laravel, Bcrypt будет использоваться для регистрации и аутентификации по умолчанию.
Bcrypt — отличный выбор для хеширования паролей, потому что его «фактор работы» регулируется, а это означает, что время, необходимое для генерации хэша, может увеличиваться по мере увеличения аппаратной мощности. При хешировании паролей лучше использовать медленную скорость. Чем больше времени требуется алгоритму для хеширования пароля, тем больше времени требуется злоумышленникам для создания «радужных таблиц» всех возможных хэш-значений строк, которые могут использоваться в атаках методом грубой силы против приложений.
Конфигурация
Драйвер хеширования по умолчанию для вашего приложения настраивается в файле конфигурации config/hashing.php
вашего приложения. В настоящее время существует несколько поддерживаемых драйверов: Bcrypt и Argon2 (варианты Argon2i и Argon2id).
{note} Для драйвера Argon2i требуется PHP 7.2.0 или выше, а для драйвера Argon2id требуется PHP 7.3.0 или выше.
Основное использование
Хэширование паролей
Вы можете хэшировать пароль, вызвав метод make
на фасаде Hash
:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller;use Illuminate\Http\Request;use Illuminate\Support\Facades\Hash; class PasswordController extends Controller{ /** * Update the password for the user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function update(Request $request) { // Validate the new password length... $request->user()->fill([ 'password' => Hash::make($request->newPassword) ])->save(); }}
Настройка рабочего фактора Bcrypt
Если вы используете алгоритм Bcrypt, метод make
позволяет вам управлять коэффициентом работы алгоритма с помощью опции rounds
; однако рабочий фактор по умолчанию, управляемый Laravel, приемлем для большинства приложений:
$hashed = Hash::make('password', [ 'rounds' => 12,]);
Регулировка рабочего фактора Argon2
Если вы используете алгоритм Argon2, метод make
позволяет вам управлять коэффициентом работы алгоритма, используя параметры memory
, time
и threads
; однако значения по умолчанию, которыми управляет Laravel, приемлемы для большинства приложений:
$hashed = Hash::make('password', [ 'memory' => 1024, 'time' => 2, 'threads' => 2,]);
{tip} Для получения дополнительной информации об этих параметрах обратитесь к официальной документации PHP, касающейся хеширования Argon.
Проверка соответствия пароля хешу
Метод check
, предоставляемый фасадом Hash
, позволяет вам проверить, соответствует ли заданная текстовая строка заданному хэшу:
if (Hash::check('plain-text', $hashedPassword)) { // The passwords match...}
Определение необходимости повторного хеширования пароля
Метод needsRehash
, предоставляемый фасадом Hash
, позволяет определить, изменился ли коэффициент работы, используемый хэшером, с момента хеширования пароля. Некоторые приложения выполняют эту проверку во время процесса аутентификации приложения:
if (Hash::needsRehash($hashed)) { $hashed = Hash::make('plain-text');}