#Введение
Laravel Hash фасад обеспечивает безопасное хеширование паролей пользователей с помощью Bcrypt и Argon2. Если вы используете один из стартовых наборов приложений Laravel, по умолчанию для регистрации и аутентификации будет использоваться Bcrypt.
Bcrypt — отличный выбор для хеширования паролей, поскольку его «фактор работы» можно настраивать, что означает возможность увеличения времени генерации хеша по мере роста мощности оборудования. При хешировании паролей медленное выполнение — это хорошо. Чем дольше алгоритм хеширует пароль, тем больше времени требуется злоумышленникам для создания «радужных таблиц» всех возможных значений хеша строк, которые могут использоваться в атаках перебором.
#Настройка
Драйвер хеширования по умолчанию для вашего приложения настраивается в конфигурационном файле config/hashing.php. В настоящее время поддерживаются несколько драйверов: Bcrypt и Argon2 (варианты Argon2i и Argon2id).
#Основное использование
#Хеширование паролей
Вы можете создать хеш пароля, вызвав метод make у фасада Hash:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class PasswordController extends Controller
{
/**
* Обновить пароль пользователя.
*/
public function update(Request $request): RedirectResponse
{
// Проверить длину нового пароля...
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
return redirect('/profile');
}
}
#Настройка фактора работы 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,
]);
Для получения дополнительной информации об этих опциях обратитесь к официальной документации PHP по хешированию Argon.
#Проверка соответствия пароля хешу
Метод check, предоставляемый фасадом Hash, позволяет проверить, соответствует ли заданная строка в открытом виде заданному хешу:
if (Hash::check('plain-text', $hashedPassword)) {
// Пароли совпадают...
}
#Определение необходимости повторного хеширования пароля
Метод needsRehash, предоставляемый фасадом Hash, позволяет определить, изменился ли фактор работы хешера с момента хеширования пароля. Некоторые приложения выполняют эту проверку во время процесса аутентификации:
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}