Skip to main content

Cryptファサードとは

Laravelの暗号化サービスは、OpenSSL の AES-256-CBC 暗号化(または AES-128-CBC)を使って、値の暗号化・復号をシンプルなインターフェースで提供します。 Laravelで暗号化されたすべての値は、メッセージ認証コード(MAC) で署名されています。 これにより、暗号化後の値が改ざんされた場合は復号できなくなります。

設定

APP_KEYの生成

暗号化を使う前に、config/app.phpkey 設定が必要です。 この値は APP_KEY 環境変数から読み込まれます。 php artisan key:generate コマンドを使って安全なキーを生成してください。 PHPのセキュアな乱数生成器を使って暗号学的に安全なキーが生成されます。
Laravelのインストール時に通常は自動生成されます。生成されたキーは .env ファイルに保存されます。
APP_KEY は絶対に公開しないでください。このキーが漏洩すると、暗号化されたデータがすべて復号されてしまいます。

暗号化キーのローテーション

暗号化キーを変更すると、すべての認証済みユーザーセッションがログアウトされます。 Laravelはセッションクッキーを含むすべてのクッキーを暗号化しているためです。 また、以前のキーで暗号化されたデータは復号できなくなります。 この問題を軽減するため、APP_PREVIOUS_KEYS に古いキーをコンマ区切りで列挙できます。
Laravelは暗号化には常に現在のキーを使用しますが、復号時は現在のキーで失敗した場合に古いキーを順番に試します。 これにより、キーのローテーション中もユーザーはアプリケーションを継続して使用できます。

暗号化

Crypt ファサードの encryptString メソッドを使って値を暗号化します。 暗号化された値はOpenSSLとAES-256-CBC暗号を使用し、MACで署名されます。
encryptString はシリアライズなしで文字列を暗号化します。オブジェクトや配列を暗号化する場合は encrypt を使用してください。

復号

Crypt ファサードの decryptString メソッドで暗号化された値を復号します。 MACが無効な場合など、正常に復号できないときは DecryptException がスローされます。

モデルのキャスト

Eloquentモデルで encrypted キャストを使うと、属性の暗号化・復号を自動で行えます。
キャストを設定すると、モデルへの値の代入・取得時に自動で暗号化・復号されます。
encrypted:* キャストは内部で Crypt::encryptCrypt::decrypt を使用します。 データベースのカラム型は text または longText を推奨します。

実用例:個人情報の暗号化保存

個人情報(マイナンバー、クレジットカード番号など)をデータベースに安全に保存する典型的なパターンです。

マイグレーション

モデル

コントローラー


まとめ

次のステップ

ハッシュ

パスワードの安全なハッシュ化と検証方法を学びます。

認可

ポリシーとゲートを使ったアクセス制御を解説します。
最終更新日 2026年4月14日