Любите загадки? Событие еще доступно на сайте.
Примите наш вызов и улучшите свои навыки!
Примите наш вызов и улучшите свои навыки!

Хеширование

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 10.x. Почему это важно?

Введение

Фасад Hash фреймворка Laravel обеспечивает безопасное хеширование Bcrypt и Argon2 для хранения паролей пользователей. Если вы используете каркас одного из стартовых комплектов приложений Laravel, то для регистрации и аутентификации по умолчанию будет использоваться Bcrypt.

Bcrypt – отличный выбор для хеширования паролей, потому что его «коэффициент работы» регулируется, а это означает, что время, необходимое для генерации хеш-кода, может быть увеличено по мере увеличения мощности оборудования. При хешировании паролей – чем медленнее, тем лучше. Чем больше времени требуется алгоритму для хеширования пароля, тем больше времени требуется злоумышленникам для создания «радужных таблиц» всех возможных строковых хеш-значений, которые могут использоваться в атаках.

Конфигурирование

Драйвер хеширования по умолчанию для вашего приложения настраивается в файле конфигурации config/hashing.php. В настоящее время существует несколько поддерживаемых драйверов: Bcrypt и Argon2 (вариации Argon2i и Argon2id).

Для драйвера 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
{
    /**
     * Обновить пароль пользователя.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        // Проверить длину нового пароля ...

        $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,
]);

Дополнительную информацию об этих параметрах можно найти в официальной документации PHP.

Проверка совпадения пароля с хешем

Метод check фасада Hash позволяет проверить, что указанная текстовая строка соответствует заданному хешу:

if (Hash::check('plain-text', $hashedPassword)) {
    // Пароли совпадают ...
}

Определение необходимости повторного хеширования пароля

Метод needsRehash фасада Hash позволяет определить, изменился ли коэффициентом работы, используемый хешером, с момента хеширования пароля. Некоторые приложения предпочитают выполнять эту проверку во время процесса аутентификации приложения:

if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
}