つよいエンジニアになるために

浅ーいフルスタックエンジニア(ほぼPHPer)が頑張ってアウトプットするブログです

Laravelのヘルパーを使った暗号化・復号化

目的

サービス内だけで復元可能なトークンデータを作成する

どこで使ったか?

Gmailのメール送信者のガイドライン対応のための登録解除処理実装
List-Unsubscribeヘッダーに付与するメール識別データの暗号化

参考:Gmailのメール送信者のガイドライン

使い方

アプリケーション固有のAPP_KEY作成

コマンド実行

php artisan key:generate

.envファイルにAPP_KEYが作成される

APP_KEY=base64:3d1f8e53f6d90948483dbfcaab1eafcc3c0e049e0ea9962f19797d0317c065d3

※漏洩したら暗号データが復元されてしまうため、機密情報として扱う

APP_KEYをconfigに設定する

config/app.php

    /*
    |--------------------------------------------------------------------------
    | Encryption Key
    |--------------------------------------------------------------------------
    |
    | This key is used by the Illuminate encrypter service and should be set
    | to a random, 32 character string, otherwise these encrypted strings
    | will not be safe. Please do this before deploying an application!
    |
    */

    'key' => env('APP_KEY'),

データの暗号化

今回はLaravelのヘルパー関数 encrypt() を使います

    $mailData = ['user_id'=>12345,'mail_category'=>1];
    $mailToken = encrypt($mailData);
    // $mailToken Sy6uwWme7HVARRDIh2nS0GyEy3ij2dmolHGL2FjUn1Y6r1ezAFmmokJH-0Rg-RUorqDiWsmf1UTezPFmHcC6-xzyqgzvwJZvTmDxDMRIoH3OynpO25FNfY7b

データの復号化

今回はLaravelのヘルパー関数 decrypt() を使います

    $mailData = decrypt($mailToken);
    // $mailData ['user_id'=>12345,'mail_category'=>1]

今回の実際の使用例

$request['headers']['List-Unsubscribe'] = "<https://taniyamama.test/unsubscribe?token=" . encrypt(['user_id'=12345,'mail_category'=1]) . ">";

終わり

意外と簡単に使えるLaravelの暗号化・復号化の紹介でした。

こういうものはガンガン活用したいですね〜!

間違いなどありましたらご指摘ください🙏