《PHP8上級試験対策》base64_encode()関数とrandom_bytes()の正しい出力

  • URLをコピーしました!

はじめに

PHPのbase64_encode()関数は、バイナリデータを文字列として安全に扱うための関数です。しかし「%E3%… のような文字列が出力される」と誤解されがちです。
本記事では、random_bytes()と組み合わせたときの正しい動作と出力の仕組みをわかりやすく解説します。

キーワード: base64_encode / random_bytes / バイナリデータ / Base64エンコード / URLエンコードの違い

目次

🧩 base64_encode()とは?

base64_encode() は、MIME Base64方式でデータをエンコードします。
主に「印字できないバイナリデータを、安全に文字列として扱う」ために使われます。

base64_encode(string $string): string

🧠 コード例

<?php
declare(strict_types=1);
error_reporting(-1);

$r = random_bytes(16);
$b = base64_encode($r);
var_dump($b);

実行結果例:

string(24) "u1w/6C3q8lK9B9dOuhkq8A=="
  • random_bytes(16) は16バイトのランダムなバイナリデータを生成
  • base64_encode() によってそれが 英数字+記号 に変換されます
  • 出力内容は毎回異なりますが、形式は常に Base64 です

🚫 よくある誤解:「%xx」形式は出ない

試験問題などで以下のように記載されていることがあります:

string(46) "%FB%98%E8%93FF%BD%E7%BD%E7%BD%3B%D998-%0026%E3%A7"

これは URLエンコードされた表現rawurlencode()などの結果)であり、
base64_encode() の出力とは異なります。Base64の出力には % 記号は含まれません。

✅ 正しい出力イメージ

string(24) "A3pdwN8Lfr5uBfwZmW0SJQ=="

構成文字:

  • A–Z, a–z, 0–9, +, /, =(パディング用)
  • この文字集合で構成されるのがBase64の特徴です。

図解:データ変換の流れ

┌──────────────┐
│ random_bytes │ 生成(バイナリ): 16バイト
└──────┬───────┘
       ↓
┌───────────────────────────┐
│ base64_encode()           │
│ バイナリ → Base64文字列      │
└──────┬────────────────────┘
       ↓
  出力例:"u1w/6C3q8lK9B9dOuhkq8A=="

🧾 まとめ

項目内容
関数base64_encode(string $string): string
目的バイナリデータをBase64形式の文字列に変換
出力形式英数字+/+= で構成される文字列
%xx形式❌ URLエンコード表現。base64_encode()とは無関係
試験でのポイントbase64_encode()はURLエンコードではない」と覚える

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次