前言
學習一個框架, 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 example code 的意思是?
- 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' => encrypt($request->secret),
])->save();
}
} - Answer:
使用 encrypt() 來加密, 並使用 fill() insert 到 $user model
Encrypting Without Serialization
Laravel Encryption 中, 當我使用 encrypt method 時, 會通過 serialize, 為什麼?
為了可以 encrypt objects 以及 arrays
以下的 Laravel example code 的意思是?
- Example:
<?php
use Illuminate\Support\Facades\Crypt;
$encrypted = Crypt::encryptString('Hello world.');
$decrypted = Crypt::decryptString($encrypted); - Answer:
Laravel 預設會使用 serialize 來 encrypt, 因為對象可能是 array 或 object, 但當 encrypt string 時, 可以使用 encryptString() 或 decryptString(), 這樣就不會使用 serialize
Decrypting A Value
以下的 Laravel example code 的意思是?
- Example:
<?php
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
//
} - Answer:
嘗試 decrypt $encryptedValue, 如果失敗, 會 throw 一個 DecryptException, 使用 cache 捕捉它
留言