カテゴリ: 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のデコレータ(@decorator)とは?関数を拡張する仕組みを解説
New2
Python
Pythonのタプルの要素を変更できない理由とその回避策を初心者向けに解説
New3
Python
Pythonのタプルとは?リストとの違いと使い分けを解説
New4
Python
Pythonのラムダ式(lambda)とは?無名関数の使い方と活用例
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.2
Java&Spring記事人気No2
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.3
Java&Spring記事人気No3
Python
PythonのMixin(ミックスイン)を完全ガイド!初心者でもわかるクラス再利用の基本
No.4
Java&Spring記事人気No4
Python
Pythonのloggingモジュール入門!初心者でもできるエラーログの記録方法をやさしく解説
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
PythonでSQLiteを使う方法!初心者でもわかるデータベース基本操作
No.7
Java&Spring記事人気No7
Python
Pythonのコンストラクタ(__init__)の使い方を解説!初心者でもわかるオブジェクトの初期化
No.8
Java&Spring記事人気No8
Python
PythonでISO 8601形式の日時に変換する方法を完全解説!初心者でもわかる時間フォーマットの基本