カテゴリ: 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
PHP
PHPのCookieのSecure, HttpOnly, SameSite設定を初心者向けに解説
New2
PHP
PHP で CSV ファイルを読み書きする方法(fgetcsv, fputcsv)初心者向けガイド!
New3
Python
PythonでOOP設計を使いこなそう!現場で役立つオブジェクト指向ベストプラクティス
New4
PHP
PHPのforeachループを完全ガイド!初心者でもわかる配列・連想配列の処理
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.3
Java&Spring記事人気No3
Python
Pythonで曜日を取得する方法を完全解説!初心者でもわかるweekday()とisoweekday()
No.4
Java&Spring記事人気No4
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
No.5
Java&Spring記事人気No5
PHP
PHPのswitch文を使った条件処理の書き方を完全ガイド!初心者でもわかる使い方
No.6
Java&Spring記事人気No6
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
No.7
Java&Spring記事人気No7
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
No.8
Java&Spring記事人気No8
Python
Pythonのwhile文の使い方!無限ループとbreak・continueの活用
-
-