Что такое bcrypt
?
bcrypt
— это криптографический алгоритм хеширования, который используется для безопасного хранения паролей. Он превращает обычный пароль в зашифрованный хеш, который невозможно (или крайне сложно) расшифровать обратно.
Laravel использует bcrypt
по умолчанию для хеширования паролей.
Как использовать bcrypt
в Laravel?
1. Хеширование пароля
use Illuminate\Support\Facades\Hash;
$hashedPassword = Hash::make('my_secure_password');
echo $hashedPassword;
// Пример результата: $2y$10$eImiTXuWVxfM37uY4JANjQ==
Hash::make()
автоматически используетbcrypt
и добавляет соль (salt) для повышения безопасности.- Хеш всегда разный для одного и того же пароля из-за соли.
2. Проверка пароля
$hashedPassword = '$2y$10$eImiTXuWVxfM37uY4JANjQ=='; // Хеш из базы данных
$plainPassword = 'my_secure_password';
if (Hash::check($plainPassword, $hashedPassword)) {
echo 'Пароль верный!';
} else {
echo 'Неверный пароль!';
}
Hash::check()
сравнивает обычный пароль с хешем.- Он не расшифровывает хеш, а применяет тот же алгоритм к введённому паролю и сравнивает результат.
3. Авто-обновление хеша (re-hash)
Если со временем параметры хеширования изменятся (например, увеличится стоимость вычислений), Laravel может автоматически определить, нужно ли обновить хеш:
if (Hash::needsRehash($hashedPassword)) {
$hashedPassword = Hash::make('my_secure_password');
}
⚡ Использование в Livewire для обновления пароля
use Illuminate\Support\Facades\Hash;
public function updatePassword()
{
$this->validate([
'state.current_password' => 'required',
'state.password' => 'required|min:8|confirmed',
]);
// Проверка текущего пароля
if (!Hash::check($this->state['current_password'], $this->user->password)) {
return session()->flash('error', 'Неверный текущий пароль.');
}
// Хеширование нового пароля
$this->user->password = Hash::make($this->state['password']);
$this->user->save();
session()->flash('success', 'Пароль успешно обновлён!');
$this->reset('state');
}
🔑 Почему bcrypt
безопасен?
- Соль (salt): добавляется автоматически, предотвращает атаки по радужным таблицам.
- Медленный: специально замедлен для защиты от атак грубой силой.
- Кросс-платформенность: одинаково работает на разных языках и системах.