PHPのCookieを暗号化・復号化する方法!初心者向けにopenssl_encryptとbase64_encodeをやさしく解説
生徒
「先生、PHPでCookieに情報を保存するときって、誰でも中身が見られるんですか?」
先生
「はい、そのまま保存すると誰でも中身を見ることができてしまいます。でも、暗号化すれば安全にできますよ。」
生徒
「暗号化って難しそうです…プログラミング未経験でもできますか?」
先生
「もちろん!PHPにはopenssl_encryptやbase64_encodeという便利な関数があるので、初心者でも大丈夫です。一緒にやってみましょう!」
1. なぜCookieの暗号化が必要なの?
PHPでCookie(クッキー)を使うと、ログイン情報やユーザー名などをブラウザに保存できます。でも、暗号化せずにそのまま保存すると、第三者に中身が見られてしまうリスクがあります。
たとえば、以下のように保存した場合:
setcookie("user", "Taro", time() + 3600);
これは「Taro」という文字列がそのまま保存されるため、ブラウザの開発ツールで誰でも簡単に確認できます。
そこで必要なのが暗号化(あんごうか)です。文字列を変換して、他人に読まれないようにする技術のことです。
2. PHPで使える暗号化の方法:openssl_encrypt
openssl_encrypt()は、PHPで暗号化を行うための関数です。「オープンエスエスエル・エンクリプト」と読みます。
この関数を使えば、ユーザー情報などのデータを安全に暗号化できます。
ただし、暗号化したデータは記号やバイナリデータが混ざって読みづらくなるため、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を元に戻す(復号化)方法
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. 実際に使ってみよう!暗号化と復号化のサンプルコード
以下は、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. セキュリティをさらに高めるためのヒント
暗号化されたCookieを扱うときは、以下の点にも注意しましょう:
- 鍵と初期化ベクトルは外部に漏れないように、環境変数などで安全に管理する
- Cookieには
httponlyやsecureオプションを付ける - XSS対策として
htmlspecialchars()を使用する - 必要があれば暗号化アルゴリズムを見直す(例:AES-256など)
初心者でも、これらを意識してPHPのCookieを扱えば、安全で安心なWebアプリケーションを作ることができます。