Laravel - Security - Hashing

前言

學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。




Configuration

Laravel Hashing 中, 支援使用哪三種算法來 hash password?
  1. Argon2i
  2. Argon2id
  3. Bcrypt




Basic Usage

以下的 Laravel example code 的意思是?
  • Example:

    <?php

    namespace App\Http\Controllers;

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

    class UpdatePasswordController extends Controller
    {
    public function update(Request $request)
    {
    // Validate the new password length...

    $request->user()->fill([
    'password' => Hash::make($request->newPassword)
    ])->save();
    }
    }
  • Answer:
    取得登入的 User model, 並將 password attribute 替換成 hash 過的 newPassword, 然後儲存

Laravel Hashing 中, 如果我要 hash password, 在以下的 example 中, 可以使用哪個 class 的 make method?
  • Example:

    <?php

    namespace App\Http\Controllers;

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

    class UpdatePasswordController extends Controller
    {
    public function update(Request $request)
    {
    // Validate the new password length...

    $request->user()->fill([
    'password' => 這裡是?::make($request->newPassword)
    ])->save();
    }
    }
  • Answer:

    <?php

    namespace App\Http\Controllers;

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

    class UpdatePasswordController extends Controller
    {
    public function update(Request $request)
    {
    // Validate the new password length...

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


Adjusting The Bcrypt Work Factor

Laravel Hashing 中, 當我 hash password 並且 driver 為 Bcrypt 時, 如果我要變更其 iterations 的次數, 假設是 12 次, 在以下的 example 中, 可以怎麼做?
  • Example:

    <?php
    $hashed = Hash::make('password', 這裡是?);
  • Answer:

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


Adjusting The Argon2 Work Factor

Laravel Hashing 中, 當 hash password 並且 driver 為 Argon2 時, 分別可以調整哪三項 work factor?
  • Example:

    <?php
    $hashed = Hash::make('password', [
    '這裡是?' => 1024,
    '這裡是?' => 2,
    '這裡是?' => 2,
    ]);
  • Answer:

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


Verifying A Password Against A Hash

Laravel Hashing 中, 如果我要驗證 hash 前跟 hash 後的密碼是否一致, 在以下的 example 中, 該使用哪個 method?
  • Example:

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

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


Checking If A Password Needs To Be Rehashed

Laravel Hashing 中, 在使用者登入後, 如果我要確認登入使用的密碼跟我目前使用的 hash work factor 是否相符, 不符的話就再 hash 一次, 並替代資料庫中的密碼, 在以下的 example 中, 可以使用哪個 method?
  • Example:

    <?php
    if (Hash::這裡是?($hashed)) {
    $hashed = Hash::make('plain-text');
    }
  • Answer:

    <?php
    if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
    }
Laravel - Security - Password Reset Laravel - Security - Encryption

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×