Unetway

Laravel - Hashing

Вступление

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

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

 

Конфигурация

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

Драйвер Argon2i требует PHP 7.2.0 или выше, а драйвер Argon2id требует PHP 7.3.0 или выше.

 

Основное использование

Вы можете хешировать пароль, вызвав 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

Если вы используете алгоритм Argon 2, то makeметод позволяет управлять фактором работы алгоритма с использованием memorytimeи threadsварианты; однако значения по умолчанию приемлемы для большинства приложений:

$hashed = Hash::make('password', [
    'memory' => 1024,
    'time' => 2,
    'threads' => 2,
]);

Для получения дополнительной информации об этих опциях, ознакомьтесь с официальной документацией PHP .

Проверка пароля против хэша

Этот checkметод позволяет вам проверить, соответствует ли данная строка открытого текста данному хешу. Однако, если вы используете LoginController включенный в Laravel , вам, вероятно, не нужно будет использовать это напрямую, так как этот контроллер автоматически вызывает этот метод:

if (Hash::check('plain-text', $hashedPassword)) {
    // The passwords match...
}

Проверка необходимости перефразирования пароля

needsRehashФункция позволяет определить , если коэффициент работы используется Hasher изменился , так как пароль был хэшируется:

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