暗号化とデコード
- ##はじめに
- Laravel の暗号化メカニズムは AES-256 および AES- を使用します。 OpenSSL 128 暗号化によって提供されます。他の暗号化アルゴリズムではなく、Laravel の組み込み暗号化ツールを使用することを強くお勧めします。すべての Laravel 暗号化結果はメッセージ認証コード (MAC) を使用して署名されるため、暗号化後に基になる値を変更することはできません。
- セットアップ
Laravel の暗号化ツールを使用する前に、まず config/app. ## をセットアップする必要があります。 php 設定ファイルの #key
オプション。php artisan key:generate
コマンドを使用してキーを生成する必要があります。これは、PHP の安全なランダム バイト ジェネレーターを使用してキーを構築する Artisan コマンドです。 key
値が正しく設定されていない場合、Laravel によって暗号化されたすべての値は安全でなくなります。#使用方法
値を暗号化する補助関数 encrypt は値を暗号化します。すべての暗号化された値は、OpenSSL の AES-256-CBC を使用して暗号化されます。さらに、すべての暗号化された値は、暗号化された文字列が改ざんされているかどうかを検出するために、メッセージ認証コード (MAC) を使用して署名されます。
シリアル化暗号化なし
暗号化プロセス中、シリアル化後に暗号化された値 serialize
が渡され、暗号化されたオブジェクトと配列が許可されます。したがって、暗号化された値を受信する非 PHP クライアントは、データを unserialize
逆シリアル化する必要があります。シリアル化せずに値を暗号化および復号化する場合は、Crypt
ファサードの encryptString
メソッドと decryptString
メソッドを使用できます:
<?php namespace App\Http\Controllers; 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' => encrypt($request->secret) ])->save(); } }
値の復号化
ヘルパー関数 decrypt
を使用して復号化できます。値を正しく復号化できない場合、たとえば MAC が無効な場合、例外 Illuminate\Contracts\Encryption\DecryptException
がスローされます:
use Illuminate\Support\Facades\Crypt; $encrypted = Crypt::encryptString('Hello world.'); $decrypted = Crypt::decryptString($encrypted);