#はじめに
Laravel の暗号化サービスは、OpenSSL を使った AES-256 および AES-128 暗号化によるテキストの暗号化・復号を簡単かつ便利に行うインターフェースを提供します。Laravel のすべての暗号化された値はメッセージ認証コード(MAC)で署名されているため、暗号化後に値が改ざんされることはありません。
#設定
Laravel の encrypter を使用する前に、config/app.php 設定ファイルの key 設定オプションを設定する必要があります。この設定値は APP_KEY 環境変数によって指定されます。php artisan key:generate コマンドを使用してこの変数の値を生成してください。key:generate コマンドは PHP のセキュアなランダムバイト生成機能を利用して、アプリケーション用の暗号学的に安全なキーを生成します。通常、APP_KEY 環境変数の値は Laravelのインストール の際に自動的に生成されます。
#Encrypter の使い方
#値の暗号化
Crypt ファサードの encryptString メソッドを使って値を暗号化できます。すべての暗号化された値は OpenSSL と AES-256-CBC 暗号で暗号化されます。さらに、すべての暗号化値はメッセージ認証コード(MAC)で署名されます。この認証コードにより、悪意のあるユーザーによる改ざんがあった場合は復号が拒否されます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
class DigitalOceanTokenController extends Controller
{
/**
* ユーザーの DigitalOcean API トークンを保存します。
*/
public function store(Request $request): RedirectResponse
{
$request->user()->fill([
'token' => Crypt::encryptString($request->token),
])->save();
return redirect('/secrets');
}
}
#値の復号
Crypt ファサードの decryptString メソッドを使って値を復号できます。メッセージ認証コードが無効など、正しく復号できない場合は Illuminate\Contracts\Encryption\DecryptException がスローされます。
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
try {
$decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
// ...
}