Hashing

Introduction

LaravelHash facade 提供安全的 Bcrypt 和 Argon2 哈希来存储用户密码。如果您使用其中之一Laravel 应用程序入门套件,默认会使用Bcrypt进行注册和认证。

Bcrypt 是散列密码的绝佳选择,因为它的“工作因数”是可调的,这意味着生成散列所需的时间可以随着硬件功率的增加而增加。散列密码时,慢是好的。算法对密码进行散列处理的时间越长,恶意用户生成所有可能的字符串散列值的“彩虹表”所需的时间就越长,这些散列值可能用于对应用程序进行暴力攻击。

Configuration

您的应用程序的默认哈希驱动程序在您的应用程序的config/hashing.php 配置文件。目前有几个受支持的驱动程序:BcryptArgon2 (Argon2i 和 Argon2id 变体)。

基本用法

散列密码

您可以通过调用make 上的方法Hash 正面:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class PasswordController extends Controller
{
    /**
     * Update the password for the user.
     */
    public function update(Request $request): RedirectResponse
    {
        // Validate the new password length...

        $request->user()->fill([
            'password' => Hash::make($request->newPassword)
        ])->save();

        return redirect('/profile');
    }
}

调整 Bcrypt 工作因数

如果您使用的是 Bcrypt 算法,则make 方法允许您使用rounds 选项;然而,Laravel 管理的默认工作因素对于大多数应用程序来说是可以接受的:

$hashed = Hash::make('password', [
    'rounds' => 12,
]);

调整 Argon2 功因数

如果您使用的是 Argon2 算法,则make 方法允许您使用memory,time, 和threads 选项;但是,大多数应用程序都可以接受 Laravel 管理的默认值:

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

Note
有关这些选项的更多信息,请参阅关于 Argon 哈希的官方 PHP 文档.

验证密码是否与哈希匹配

check 提供的方法Hash facade 允许您验证给定的纯文本字符串是否对应于给定的哈希值:

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

确定密码是否需要重新哈希

needsRehash 提供的方法Hash facade 允许您确定自密码被散列后散列器使用的工作因子是否发生了变化。一些应用程序选择在应用程序的身份验证过程中执行此检查:

if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
}
豫ICP备18041297号-2