Фасад Hash
фреймворка Laravel обеспечивает безопасное хеширование Bcrypt и Argon2 для хранения паролей пользователей. Если вы используете каркас одного из стартовых комплектов приложений Laravel, то для регистрации и аутентификации по умолчанию будет использоваться Bcrypt.
Bcrypt – отличный выбор для хеширования паролей, потому что его «коэффициент работы» регулируется, а это означает, что время, необходимое для генерации хеш-кода, может быть увеличено по мере увеличения мощности оборудования. При хешировании паролей – чем медленнее, тем лучше. Чем больше времени требуется алгоритму для хеширования пароля, тем больше времени требуется злоумышленникам для создания «радужных таблиц» всех возможных строковых хеш-значений, которые могут использоваться в атаках.
Драйвер хеширования по умолчанию для вашего приложения настраивается в файле конфигурации config/hashing.php
. В настоящее время существует несколько поддерживаемых драйверов: Bcrypt и Argon2 (вариации Argon2i и Argon2id).
Вы можете хешировать пароль, вызвав метод 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
{
/**
* Обновить пароль пользователя.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function update(Request $request)
{
// Проверить длину нового пароля ...
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
}
Если вы используете алгоритм Bcrypt, метод make
позволяет вам управлять коэффициентом работы алгоритма с помощью параметра rounds
; однако значение по умолчанию приемлемо для большинства приложений:
$hashed = Hash::make('password', [
'rounds' => 12,
]);
Если вы используете алгоритм Argon2, метод make
позволяет вам управлять коэффициентом работы алгоритма с помощью параметров memory
, time
и threads
; однако значения по умолчанию приемлемы для большинства приложений:
$hashed = Hash::make('password', [
'memory' => 1024,
'time' => 2,
'threads' => 2,
]);
Примечание
Дополнительную информацию об этих параметрах можно найти в официальной документации PHP.
Метод check
фасада Hash
позволяет проверить, что указанная текстовая строка соответствует заданному хешу:
if (Hash::check('plain-text', $hashedPassword)) {
// Пароли совпадают ...
}
Метод needsRehash
фасада Hash
позволяет определить, изменился ли коэффициентом работы, используемый хешером, с момента хеширования пароля. Некоторые приложения предпочитают выполнять эту проверку во время процесса аутентификации приложения:
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}