Base64エンコーディングの基礎知識

Base64はウェブページやメールの添付ファイル、ソースコードのあちこちに登場する。ここではその基本的なしくみを整理する。

Base64とは何か

Base64とは、任意のバイナリデータを64種類の印字可能なASCII文字(A〜Z、a〜z、0〜9、そして「+」と「/」)だけで構成されたテキストに変換する方式のこと。印字できないバイトを含みうるデータでも、テキストしか扱えない環境で安全にやり取りできるようにするのが目的である。

エンコードの基本的な仕組み

元データの3バイト(24ビット)ごとに6ビットずつ4つのグループに分割し、それぞれの6ビットの値を64文字の対応表の1文字に置き換える。そのため、エンコード後のテキストは元データよりおよそ3分の1ほど長くなる。

末尾に付く「=」記号の意味

元データのバイト数が3の倍数でない場合、最後のグループは0で埋められ、出力の末尾に「=」記号が1つまたは2つ付加される。これはデコード時に最後の不完全なグループをどう扱えばよいかを示す目印である。

エンコードは暗号化とは別物

Base64はデータの見た目を変えているだけで、鍵がなくても誰でも元に戻せる。Base64文字列さえあれば誰でもデコードして元のデータを復元できるため、機密情報の保護には使えない。あくまで「テキストしか扱えない環境でデータをやり取りできるようにする」という別の問題を解決するための仕組みである。

よく使われる場面

メール添付ファイルのエンコード(MIME)、ウェブページに小さな画像やフォントファイルをテキストとして直接埋め込むdata URL、そしてJSONのようなプレーンテキスト形式の中に画像やファイルといったバイナリデータを含める場合などによく使われる。

エンコードするとファイルが大きくなる理由

元データの3バイトごとに4文字の出力になるため、エンコード後のサイズは理論上およそ33%膨らむ。そのため、転送サイズが重要になる大きなファイルの転送では、ファイル全体をBase64でそのままエンコードすることは避け、バイナリのまま転送するか専用の圧縮方式を使うのが一般的である。

URLセーフなBase64の変種

標準のBase64文字セットには「+」と「/」が含まれるが、この2文字はURLやファイル名の中では特別な意味を持つ。そのため多くの場面では、「+」を「-」に、「/」を「_」に置き換えたURLセーフな変種が使われ、追加のエスケープ処理なしでそのままURLやファイル名に組み込めるようになっている。

よくある質問

Base64エンコードは「解読」できてしまうのか

厳密には「解読」という概念自体が当てはまらない。Base64は公開された可逆的な変換規則であり、標準的なツールがあれば誰でもそのままデコードできる。鍵も計算量的な難しさも関係しておらず、そもそも秘密を守るための仕組みとして設計されていない。

ウェブで送受信されるデータはすべてBase64でエンコードされているのか

いいえ。ウェブページのテキストやJSONデータそのものなど、ほとんどの通信ではBase64は不要である。Base64は主に、バイナリデータをテキストのみを扱うプロトコルや形式に混在させる必要がある特定の場面で使われ、実際に使うかどうかはデータの種類や転送方法によって決まる。