メインコンテンツへスキップ

← ブログ一覧へ

Base64 と URL エンコードの違いは?

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、テキストをリンクに安全に入れるなら 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 セーフな一部の変種では省かれます。

どちらかでデータは安全になる?

なりません。エンコードは形式の話で、秘密の話ではありません——誰でも元に戻せます。機密性には暗号化を、改ざん検知にはハッシュか署名を使います。