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