Laravel

Laravel encrypt() decrypt()を使った暗号化・ 復号化の方法について解説【意外と簡単】

タクマ

こんにちは!タクマです。

31歳未経験からエンジニア転職に成功し、

2021年3月より都内の受託開発企業にてサーバーサイドエンジニアとして働いており、

PHP/Laravelを使用し開発をしています。

今回はLaravelの暗号化と復号化の方法について解説します!

暗号化・復号化の方法がわからない

という方はこの記事を最後まで読めば、一発で理解できますので、ぜひ最後まで読んでください。

暗号化をする前の準備

下記コマンドを実行して、キーを作成します。

php artisan key:generate

このコマンドを実行することにより、.envAPP_KEYにキーが生成されます。

APP_KEY=base64:B/LUBugn7CEJOzKueNy3myihCtq1Sefgl3P93LE19jf=

この生成されたAPP_KEYconfig/app.phpkeyオプションで読み取られています。

このkeyオプションが設定されていないと暗号化できません。

/*
|--------------------------------------------------------------------------
| 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'),

'cipher' => 'AES-256-CBC',

// 以下省略

暗号化の方法

暗号化をするにはencrypt()ヘルパー関数を使います。

$book = collect(['id' => 1, 'title' => 'キングダム', 'author' => '原泰久']);
$enc_book = encrypt($book);

dd($enc_book);

// 実行結果
"eyJpdiI6IjZ6WTl1WkhvV284 --以降省略--

このようにencrypt()ヘルパー関数を使うだけで暗号化することができます。

復号化の方法

復号化をするにはdecrypt()ヘルパー関数を使用します。

$book = collect(['id' => 1, 'title' => 'キングダム', 'author' => '原泰久']);
$enc_book = encrypt($book);
$dec_book = decrypt($enc_book);

dd($dec_book);

// 実行結果
Illuminate\Support\Collection {#1372 ▼
  #items: array:3 [▼
    "id" => 1
    "title" => "キングダム"
    "author" => "原泰久"
  ]
}

このようにdecrypt()ヘルパー関数を使うだけで復号化することができます。

どんな場面で暗号化を使うのか?

ここまでの説明で暗号化・復号化の方法について理解していただけたかと思います。

ではどんな場面で暗号化を使うのか?ということについてお話しさせていただきます。

基本的にはURLのIDなどは暗号化するべきです。

例えば

http://exampleexample/users/3/edit

上のようなURLのIDは表示されない方がセキュリティ的には安全です。

IDが表示されているとIDの部分だけ変更し、他人の編集画面にもアクセスできてしまうかもしれません。

(もちろんほとんどの場合サーバー側でアクセスできないよう制御はしていると思いますが。)

なのでURLのIDも暗号化すればセキュリティ的により安全になります。

URLのIDを暗号化する場合は、下記のように暗号化したIDを渡せばできます。

// 3というidを暗号化して渡している
<a href="{{ route('users.edit', ['id' => encrypt($user->id)]) }}">

そして復号化する場合はコントローラでできます。

public function edit(int $id)
{
    $id = decrypt($id);   // 複合化することで$idは3となる
    
 }

このようにすることでURLのIDは下記のように暗号化されており、セキュリティ的により安全になりました。

http://exampleexample/users/rbpIkxGbUZudU--中略--RkYjFlZZDYyIn0=/edit

なので、URLに表示するIDはこのように必ず暗号化しておきましょう!

さいごに

いかがでしたでしょうか?

暗号化・復号化について理解できましたでしょうか?

ご質問やご指摘等ある方はコメントしていただければ返信させていただきます。

これからもLaravelエンジニアの方、Laravel学習中の初学者の方に役に立つ記事を更新していきますのでよろしくお願いします!

Twitterでも情報発信をしていますので、よかったらフォローをお願いします(^^)

Webエンジニア
タクマ
埼玉県出身の31歳

30歳からプログラミングを始め31歳でWebエンジニアに転職成功。

現在は都内の受託開発企業にてサーバーサイドエンジニアをしています。

\ Follow me /

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA