Lang x Lang

Encryption

Table of Contents

Introduction

Laravel の encryption services は、OpenSSL を使用した AES-256 および AES-128 の encryption を通じてテキストを暗号化および復号化するためのシンプルで便利なインターフェースを提供します。Laravel のすべての暗号化された values は、メッセージの authentication code (MAC)を使って署名されているため、一度暗号化されるとその基盤となる value は改ざんまたは変更することができません。

Configuration

Laravel の暗号化機能を使用する前に、config/app.php設定ファイル内でkey設定オプションを設定する必要があります。この設定の value は、APP_KEY environment 変数によって制御されます。php artisan key:generate command を使用して、この変数の value を生成すべきです。なぜなら、key:generate command は、PHP のセキュアな random バイトジェネレータを使用して、あなたの application のための暗号学的に安全なキーを build するからです。通常、APP_KEY environment 変数の value は、Laravel のインストール中にあなたのために生成されます。

優雅に回転する Encryption Keys

あなたのアプリケーションの encryption キーを変更すると、すべての認証された user セッションがあなたの application からログアウトされます。これは、 session クッキーを含むすべての cookie が Laravel によって暗号化されているためです。また、以前の encryption キーで暗号化された任意の data を復号化することはもはや可能ではありません。

この問題を緩和するために、 Laravel は、application のAPP_PREVIOUS_KEYS environment variables に以前の暗号化 keys をリスト化することを許可します。この variable は、以前のすべての暗号化 keys のコンマ区切りのリストを含む可能性があります。

APP_KEY="base64:J63qRTDLub5NuZvP+kb8YIorGS6qFYHKVo6u7179stY="
APP_PREVIOUS_KEYS="base64:2nLsGFGzyoae2ax3EF2Lyq/hH6QghBGLIq5uL+Gp8/w="

この environment 変数を設定すると、 Laravel は current の encryption キーを使用して必ず values を暗号化します。しかし、 values を復号化するときに、 Laravel はまず現在のキーを試し、現在のキーを使用した復号化が失敗した場合、 Laravel は value を復号化できる keys の 1 つが見つかるまで、以前のすべての keys を試します。

この優雅な復号化のアプローチにより、 users はあなたの encryption キーがローテーションされても、あなたの application を中断することなく使用し続けることが可能です。

Using the Encrypter

Value の暗号化

Crypt facade が提供するencryptString method を使用して value を暗号化することができます。すべての暗号化された value は、OpenSSL と AES-256-CBC 暗号を使用して暗号化されます。さらに、すべての暗号化された value はメッセージ authentication コード(MAC)で署名されます。統合されたメッセージ authentication コードは、悪意のある users によって改ざんされたすべての value の復号化を防ぎます:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;

class DigitalOceanTokenController extends Controller
{
    /**
     * Store a DigitalOcean API token for the user.
     */
    public function store(Request $request): RedirectResponse
    {
        $request->user()->fill([
            'token' => Crypt::encryptString($request->token),
        ])->save();

        return redirect('/secrets');
    }
}

Value の復号化

Cryptの facade が提供するdecryptString method を使用して values を復号化することができます。 values が正しく復号化されない場合、たとえば、メッセージ authentication コードが無効である場合は、Illuminate\Contracts\Encryption\DecryptExceptionが throw されます。

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;

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

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use