サイトを更新しています。 数日間、レイアウトや翻訳に不具合が出ることがあります。ドキュメントは引き続きご利用いただけます。表示が崩れている場合は、後ほど再読み込みしてください。

暗号化

10.x 2026年3月7日

#はじめに

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) {
    // ...
}