加密

設定

在使用 Laravel 的加密器前,你應該先設定 config/app.php 設定檔中的 key 選項,設定值需要是 32 個字元的隨機字串。如果沒有適當地設定這個值,所有被 Laravel 加密的值將是不安全的。

基本用法

加密一個值

你可以藉由 Crypt facade 加密一個值。所有被加密的值都會使用 OpenSSL 與 AES-256-CBC 加密。此外,所有加密過後的值都會被簽署文件訊息鑑別碼 (MAC),以偵測加密字串是否被竄改。

例如,我們可以使用 encrypt 方法加密機密資訊,並把它儲存在 Eloquent 模型中:

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    /**
     * 儲存使用者的機密訊息。
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function storeSecret(Request $request, $id)
    {
        $user = User::findOrFail($id);

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

解密一個值

當然,你可以使用 Crypt facade 上的 decrypt 方法來解密值。如果該值無法被適當地解密,像是文件訊息鑑別碼無效等因素,將會拋出一個 Illuminate\Contracts\Encryption\DecryptException

use Illuminate\Contracts\Encryption\DecryptException;

try {
    $decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
    //
}