哈希
#簡介
設定Laravel Hash
facade 為儲存使用者密碼提供了安全的Bcrypt 和Argon2 雜湊加密方式。如果你在你的 Laravel 應用程式中使用了內建的LoginController
和 RegisterController
類,那麼它們預設使用 Bcrypt 進行註冊和認證。{tip} Bcrypt 是雜湊密碼的理想選擇,因為它的「加密係數」 可以任意調整,這意味著產生雜湊所需的時間可以隨著硬體功率的增加而增加。
設定
#你可以在config/hashing.php
配置文件中配置預設哈希驅動程式。目前支援三種驅動程式:Bcrypt
和 Argon2
(Argon2i and Argon2id variants)。{note} Argon2i 驅動程式需要 PHP 7.2.0 或更高版本,而 Argon2id 驅動程式則需要 PHP 7.3.0 或更高版本。
基本用法
你可以透過呼叫Hash
facade 的make
方法來加密你的密碼:<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller;class UpdatePasswordController extends Controller{
/**
* 更新用户密码。
*
* @param Request $request
* @return 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, ]);
{tip} 有關這些選項的更多信息,請查閱 PHP 官方文件。
密碼雜湊驗證
check
方法能為您驗證一段給定的未加密字串與給定的哈希值是否一致。然而,如果您使用Laravel 內建的LoginController
控制器,您可能不需要直接使用此方法,因為該控制器會自動呼叫此方法:
if (Hash::check('plain-text', $hashedPassword)) { // 密码匹配 }
檢查密碼是否需要重新雜湊
needsRehash
方法可以為您檢查當雜湊的加密係數改變時,您的密碼是否被新的加密係數重新加密過:
if (Hash::needsRehash($hashed)) { $hashed = Hash::make('plain-text'); }