Laravel - Security - Encryption

前言

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




Introduction

Laravel Encryption 中, 使用了哪個套件提供 Encryption?

OpenSSL

Laravel Encryption 中, 使用了 OpenSSL 提供哪兩種 Encryption?
  • AES-256
  • AES-128
Laravel Encryption 中, 所有 encrypted 的 value 都使用什麼來簽名?

message authentication code

Encryption 中, MAC 的全寫是?

message authentication code

Encryption 中, MAC 的簡單解釋?

傳送方使用雙方約定好的金鑰以及演算法對傳送內容加密, 加密後會得到一串驗證碼, 與傳送內容一同傳送給接收方, 接收方收到後, 會使用雙方約定好的金曜以及演算法對傳送內容加密, 看加密後得到的驗證碼與傳送方傳過來的驗證碼是否相同, 若相同, 則傳送內容為可信




Configuration

Laravel Email Verification 中, 如何使用 CLI 來產生 key?
php artisan key:generate




Using The Encryption

Encrypting A Value

Laravel Encryption 中, encrypt helper 使用了什麼來加密?
  • OpenSSL
  • AES-256-CBC cipher
Laravel Encryption 中, 在以下的 example, 如果我要 encrypt secret, 可以使用哪一個 method?
  • Example:

    <?php

    namespace App\Http\Controllers;

    use App\Http\Controllers\Controller;
    use App\User;
    use Illuminate\Http\Request;

    class UserController extends Controller
    {
    public function storeSecret(Request $request, $id)
    {
    $user = User::findOrFail($id);

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

    <?php

    namespace App\Http\Controllers;

    use App\Http\Controllers\Controller;
    use App\User;
    use Illuminate\Http\Request;

    class UserController extends Controller
    {
    public function storeSecret(Request $request, $id)
    {
    $user = User::findOrFail($id);

    $user->fill([
    'secret' => encrypt($request->secret),
    ])->save();
    }
    }


Encrypting Without Serialization

Laravel Encryption 中, 當我使用 encrypt method 時, 會通過 serialize, 為什麼?

為了可以 encrypt objects 以及 arrays

Laravel Encryption 中, 當我使用 encrypt method 時, 會通過 serialize, 因為要 encrypt array 以及 object, 如果我不想使用 serialize, 例如當我在 encrypt string 時, 那在以下 example 中, 可以使用哪些 method 來加解密?
  • Example:

    <?php
    use Illuminate\Support\Facades\Crypt;

    $encrypted = Crypt::這裡是?('Hello world.');

    $decrypted = Crypt::這裡是?($encrypted);
  • Answer:

    <?php
    use Illuminate\Support\Facades\Crypt;

    $encrypted = Crypt::encryptString('Hello world.');

    $decrypted = Crypt::decryptString($encrypted);
Laravel Encryption 中, 當我使用 encrypt method 時, 會通過 serialize, 因為要 encrypt array 以及 object, 如果我不想使用 serialize, 例如當我在 encrypt string 時, 那在以下 example 中, 可以使用哪個 class 的加解密 method??
  • Example:

    <?php
    use Illuminate\Support\Facades\Crypt;

    $encrypted = 這裡是?::encryptString('Hello world.');

    $decrypted = 這裡是?::decryptString($encrypted);
  • Answer:

    <?php
    use Illuminate\Support\Facades\Crypt;

    $encrypted = Crypt::encryptString('Hello world.');

    $decrypted = Crypt::decryptString($encrypted);


Decrypting A Value

Laravel Encryption 中, 如果我要解密一個由 Laravel 加密的 value, 在以下的 example 中, 該使用哪個 method?
  • Example:

    <?php
    use Illuminate\Contracts\Encryption\DecryptException;

    try {
    $decrypted = 這裡是?($encryptedValue);
    } catch (DecryptException $e) {
    //
    }
  • Answer:

    <?php
    use Illuminate\Contracts\Encryption\DecryptException;

    try {
    $decrypted = decrypt($encryptedValue);
    } catch (DecryptException $e) {
    //
    }
Laravel Encryption 中, 如果 decrypt 失敗, 在以下的 example 中, 會丟一個什麼 exception?
  • Example:

    <?php
    use Illuminate\Contracts\Encryption\DecryptException;

    try {
    $decrypted = decrypt($encryptedValue);
    } catch (這裡是? $e) {
    //
    }
  • Answer:

    <?php
    use Illuminate\Contracts\Encryption\DecryptException;

    try {
    $decrypted = decrypt($encryptedValue);
    } catch (DecryptException $e) {
    //
    }
Laravel - Security - Hashing Laravel - Security - Email Verification

留言

Your browser is out-of-date!

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

×