哈希


設定
  • 基本用法
#簡介

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 方法中使用memorytimethreads 選項來配置該演算法的加密係數。然後,對大多數應用程式來說,預設值就足夠了:

$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');
 }
本篇首刊在LearnKu.com 網站上。