Base64エンコードとは?仕組みと実務での使いどころを解説
公開日:
Base64は、APIの認証ヘッダーやJWT、画像のインライン埋め込みなど、開発の様々な場面で目にするエンコード方式です。仕組みを正しく理解しておくと、なぜサイズが増えるのか、なぜ暗号化ではないのか、といった疑問に自分で答えられるようになります。
なぜBase64が生まれたのか
インターネット黎明期のメールシステム(SMTP)は7ビットのASCII文字しか正しく送信できない設計でした。画像や実行ファイルのようなバイナリデータをメールに添付するには、バイナリをテキストだけで表現する方法が必要になり、その解決策の1つとしてBase64(MIMEの一部として標準化)が使われるようになりました。
現在ではメール添付だけでなく、JWTのペイロード表現やデータURIスキームなど、テキストしか扱えない仕組みの中にバイナリ相当のデータを埋め込みたい場面で広く使われています。
エンコードの仕組み
Base64は3バイト(24ビット)のデータを6ビットずつ4つに分割し、それぞれをA-Z・a-z・0-9・+・/の64種類の文字(インデックス0〜63)に対応させて4文字の文字列に変換します。入力のバイト数が3の倍数でない場合は、不足分を「=」でパディングします。
3バイトが4文字になる、つまりデータ量が4/3倍になるため、Base64エンコード後のデータは元のバイナリよりおよそ33%大きくなります。
URL-safe Base64との違い
通常のBase64で使われる「+」「/」はURLやファイル名の中で特別な意味を持つ文字と衝突するため、そのままではURLに含めることができません。URL-safe Base64ではこれらを「-」「_」に置き換え、パディングの「=」も省略することでURLやファイル名として安全に使えるようにしています。JWTのheaderとpayloadはこのURL-safe形式でエンコードされています。
使用時の注意点
Base64はあくまで表現方式であり、暗号化ではありません。誰でもデコードして元のデータを復元できるため、パスワードやAPIキーのような機密情報をBase64化しただけで安全と考えるのは誤りです。機密情報を保護したい場合は、TLSによる通信の暗号化や、別途の暗号化処理を組み合わせる必要があります。