Base64 と URL エンコードは、どちらも「データをテキストとして安全に送る」ための道具なので混同しがちです。でも解決する問題は異なります。違いを見ていきましょう。
Base64:バイナリ → テキスト
Base64 はあらゆるバイナリデータ(画像・ファイル・生バイト)を、ASCII の英数字と +・/・= に変えます。データは約 33% 大きくなり、暗号化ではありません——誰でもデコードできます。テキストしか通せない経路でバイナリを運ぶときに使います。
- 画像を
data:URI として HTML/CSS に埋め込む - メール添付(MIME)
- 小さなバイナリを JSON やトークンに入れる
詳しくは Base64 は暗号化?(ネタバレ:違います)。
URL エンコード:URL に安全に入れるテキスト
URL エンコード(別名パーセントエンコード)は、URL で特別な意味を持つ、または使えない文字を %XX に置き換えます——スペースは %20、& は %26 など。次の場所にテキストを入れるときに使います。
- クエリ文字列(
?q=hello%20world) - パスの一部
- フォーム送信
詳細は URL エンコードガイド を。
違いを一目で
- 目的:Base64 = バイナリをテキストで運ぶ · URL エンコード = テキストを URL で安全にする。
- 出力:Base64 = A–Z a–z 0–9 + / = · URL エンコード = 元のテキスト +
%XXエスケープ。 - サイズ:Base64 ≈ +33% · URL エンコードはエスケープされた文字だけ増える。
両者はよく組み合わさる
Base64 文字列は +・/・= を含むことがあり、URL では安全ではありません——そこで Base64 を URL に入れるなら、URL エンコードするか、Base64URL(- と _ を使う URL 安全版)を使います。
両方試す(端末内)
- Base64 エンコード/デコード——バイナリ/テキスト ⇄ Base64。
- URL エンコード/デコード——テキストを URL 用にパーセントエンコード。
目安:バイナリをテキストで運ぶなら Base64、テキストをリンクに安全に入れるなら URL エンコード。
実際の例
テキスト a b&c を見てみましょう。2つのエンコードはまったく別の扱いをします。
入力: a b&c
URL エンコード: a%20b%26c
Base64: YSBiJmM=
URL エンコードは英字にはふれず、スペースと & だけをエスケープするので、結果はまだ読めます。Base64 はすべてのバイトを独自のアルファベットに書き換え(3 バイトを 4 文字に)、出力は入力とまるで似ていません——その代わり、安全な文字が少ししか通らない経路でも生き残れます。仕事が違えば、出力も違うのです。
よくある誤用
- Base64 でデータを「隠す」:一手で戻せるので何も守れません——鍵ではなく封筒だと考えてください。Base64 は暗号化? を参照。
- URL 全体を URL エンコードする:エンコードするのは一部分(クエリ値やパスの一部)であって、アドレス全体ではありません。さもないと
https://がhttps%3A%2F%2Fになりリンクが壊れます。 - 二重エンコード:すでにエンコードした値をもう一度エンコードすると
%2520になります(%自体がエスケープされた形)。スペースが%20ではなく%2520で届いたら、二度エンコードされた証拠です。 - Base64 の
+と/を忘れる:素の Base64 は URL セーフではありません。URL に入れるなら Base64URL を使うか、文字列を URL エンコードします。
それぞれの出番
- Base64 は、バイナリをテキストに載せる場面で登場します:
data:URI、メールの MIME パート、JWT の各セグメント、JSON に詰め込むバイナリ項目など。 - URL エンコード は、テキストを URL に載せる場面で登場します:クエリ文字列、フォーム送信(
application/x-www-form-urlencoded)、スペースや非 ASCII を含むパスの一部など。
よくある質問
URL エンコードの代わりに Base64 を使える?
いいえ——両者は交換できません。Base64 はバイナリをテキストセーフに、URL エンコードはテキストを URL セーフにします。素の Base64 を URL に入れると、+・/・= のせいで壊れることがあります。
Base64 の末尾が = なのはなぜ?
出力の長さを 4 の倍数にそろえるためのパディングです。正常で、URL セーフな一部の変種では省かれます。
どちらかでデータは安全になる?
なりません。エンコードは形式の話で、秘密の話ではありません——誰でも元に戻せます。機密性には暗号化を、改ざん検知にはハッシュか署名を使います。