カテゴリ: PHP 更新日: 2026/02/09

PHPのCookieを暗号化・復号化する方法!初心者向けにopenssl_encryptとbase64_encodeをやさしく解説

PHP の Cookie の暗号化と復号化(openssl_encrypt, base64_encode)
PHP の Cookie の暗号化と復号化(openssl_encrypt, base64_encode)

先生と生徒の会話形式で理解しよう

生徒

「先生、PHPでCookieに情報を保存するときって、誰でも中身が見られるんですか?」

先生

「はい、そのまま保存すると誰でも中身を見ることができてしまいます。でも、暗号化すれば安全にできますよ。」

生徒

「暗号化って難しそうです…プログラミング未経験でもできますか?」

先生

「もちろん!PHPにはopenssl_encryptやbase64_encodeという便利な関数があるので、初心者でも大丈夫です。一緒にやってみましょう!」

1. なぜCookieの暗号化が必要なの?

1. なぜCookieの暗号化が必要なの?
1. なぜCookieの暗号化が必要なの?

PHPでCookie(クッキー)を使うと、ログイン情報やユーザー名などをブラウザに保存できます。でも、暗号化せずにそのまま保存すると、第三者に中身が見られてしまうリスクがあります。

たとえば、以下のように保存した場合:


setcookie("user", "Taro", time() + 3600);

これは「Taro」という文字列がそのまま保存されるため、ブラウザの開発ツールで誰でも簡単に確認できます。

そこで必要なのが暗号化(あんごうか)です。文字列を変換して、他人に読まれないようにする技術のことです。

2. PHPで使える暗号化の方法:openssl_encrypt

2. PHPで使える暗号化の方法:openssl_encrypt
2. PHPで使える暗号化の方法:openssl_encrypt

openssl_encrypt()は、PHPで暗号化を行うための関数です。「オープンエスエスエル・エンクリプト」と読みます。

この関数を使えば、ユーザー情報などのデータを安全に暗号化できます。

ただし、暗号化したデータは記号やバイナリデータが混ざって読みづらくなるため、Cookieで保存するには少し工夫が必要です。

3. base64_encodeで暗号化データをCookieに保存可能な形式に

3. base64_encodeで暗号化データをCookieに保存可能な形式に
3. base64_encodeで暗号化データをCookieに保存可能な形式に

base64_encode()は、データをアルファベットや数字だけで構成された形式に変換する関数です。

暗号化したデータをそのままCookieに保存するとエラーになることがあるため、base64エンコードが必要です。

たとえば、以下のように使います:


$encrypted = openssl_encrypt("Taro", "AES-128-CBC", $key, 0, $iv);
$encoded = base64_encode($encrypted);
setcookie("user", $encoded, time() + 3600);

このコードでは、まず「Taro」を暗号化し、それをbase64でエンコードしてからCookieに保存しています。

4. 暗号化されたCookieを元に戻す(復号化)方法

4. 暗号化されたCookieを元に戻す(復号化)方法
4. 暗号化されたCookieを元に戻す(復号化)方法

Cookieから元の情報を取り出すには、逆の操作をします。つまり、base64_decode()でデコードし、openssl_decrypt()で復号化します。


$decoded = base64_decode($_COOKIE['user']);
$decrypted = openssl_decrypt($decoded, "AES-128-CBC", $key, 0, $iv);
echo $decrypted; // 出力結果:Taro

こうすることで、安全に保存した情報をPHPで読み取ることができます。

5. 実際に使ってみよう!暗号化と復号化のサンプルコード

5. 実際に使ってみよう!暗号化と復号化のサンプルコード
5. 実際に使ってみよう!暗号化と復号化のサンプルコード

以下は、PHPでCookieを暗号化して保存し、それを復号化するまでの一連の流れです。


$key = "1234567890123456"; // 16文字の暗号鍵(例)
$iv = "1234567890123456"; // 16文字の初期化ベクトル(例)

// 暗号化
$original = "Taro";
$encrypted = openssl_encrypt($original, "AES-128-CBC", $key, 0, $iv);
$encoded = base64_encode($encrypted);
setcookie("secure_user", $encoded, time() + 3600);

// 復号化(別のページなどで実行)
if (isset($_COOKIE['secure_user'])) {
    $decoded = base64_decode($_COOKIE['secure_user']);
    $decrypted = openssl_decrypt($decoded, "AES-128-CBC", $key, 0, $iv);
    echo "復号化した値:" . htmlspecialchars($decrypted);
}

このコードでは、セキュリティのために鍵($key)と初期化ベクトル($iv)を使用しています。これらは固定ではなく、より安全な方法で生成・管理するのが望ましいです。

6. セキュリティをさらに高めるためのヒント

6. セキュリティをさらに高めるためのヒント
6. セキュリティをさらに高めるためのヒント

暗号化されたCookieを扱うときは、以下の点にも注意しましょう:

  • 鍵と初期化ベクトルは外部に漏れないように、環境変数などで安全に管理する
  • Cookieにはhttponlysecureオプションを付ける
  • XSS対策としてhtmlspecialchars()を使用する
  • 必要があれば暗号化アルゴリズムを見直す(例:AES-256など)

初心者でも、これらを意識してPHPのCookieを扱えば、安全で安心なWebアプリケーションを作ることができます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonのカスタム例外を作成する方法を完全解説!初心者でもわかる独自のExceptionクラス入門
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPの真偽値と条件判定をやさしく解説!初心者でもわかるempty・isset・is_nullの使い方
New4
PHP
PHP の file_get_contents() を使ってファイルを読み込む方法!初心者でもできる簡単なファイル操作
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのクラスメソッドと静的メソッドの違いとは?初心者でも迷わない使い分けガイド
No.4
Java&Spring記事人気No4
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.5
Java&Spring記事人気No5
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.6
Java&Spring記事人気No6
PHP
初心者向けPHP の MySQL のデータを更新する方法(UPDATE 文)完全ガイド
No.7
Java&Spring記事人気No7
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.8
Java&Spring記事人気No8
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化