Base64 と URL エンコードの違い
Base64 はバイト列をテキストとして表し、URL エンコードは URL の特定部分で文字を安全に扱うための仕組みです。
Base64 と URL エンコードはどちらも「エンコード」ですが、置き換え可能なものではありません。Base64 はバイト列をテキストとして表します。URL エンコードは、URL の特定部分で文字を安全に扱えるようにします。
間違った方式を使うと、値は一見エンコードされているように見えても、置いた場所で壊れます。
Base64 はバイト列を表す
Base64 はバイナリデータをテキストの alphabet に変換します。テキストしか扱えない場所へバイト列を運びたいときに便利です。
よくある例:
- 小さなバイナリ値を JSON に入れる
- Base64URL を使う token segment を確認する
- テキスト中心の経路でバイト列を運ぶ
- 小さな asset を data URL にする
質問が「この Base64 値はどんなバイト列や文字列を表しているか」なら、Base64 のデコードが適しています。
URL エンコードは URL の文脈を守る
URL エンコードは、URL の中で構造上の意味を持つ文字をデータとして扱えるようにします。たとえば query value に & を含めたい場合、そのままでは別の parameter 区切りとして解釈される可能性があります。
この場合は Base64 ではなく、query value として percent-encoding する必要があります。
使い分け
- バイト列をテキスト化したい: Base64
- URL の一部に安全に文字列を入れたい: URL エンコード
- JWT の segment を読む: 多くの場合 Base64URL
- OAuth redirect_uri を query value に入れる: URL エンコード
両方が同時に出てくることもあります。たとえば Base64URL で表された token を URL に入れる場合、値の意味と URL 内での位置を分けて考えると安全です。