バイナリデータの Base64 エンコーディング

Base64 がバイナリデータを ASCII テキストにエンコードする仕組みを理解。6ビットグループ化のプロセス、64文字のアルファベット、パディングルール、一般的な用途を解説。

Binary / Raw BytesBase64 (64 ASCII characters)Encoding

詳細な説明

Base64 エンコーディングは、任意のバイナリデータを64種類の印刷可能な ASCII 文字を使ったテキスト文字列に変換します。多くの転送プロトコル(メール、JSON、URL)は生のバイナリバイトではなくテキストのみを確実に扱えるため、Base64 が存在します。

Base64 のアルファベット:

A-Z(0-25)、a-z(26-51)、0-9(52-61)、+(62)、/(63)、パディングには = を使用。

ビットレベルでの Base64 の動作:

  1. 入力の3バイト(合計24ビット)を取る
  2. 6ビットずつ4グループに分割
  3. 各6ビット値を Base64 アルファベットの文字に対応付け

ステップごとの例 --- "Hi" をエンコード:

  1. ASCII 値: H=72, i=105
  2. 2進数: 01001000 01101001
  3. 6ビットの倍数にゼロパディング追加: 01001000 01101001 00000000
  4. 6ビットグループに分割: 010010 000110 100100 000000
  5. Base64 インデックスに変換: 18, 6, 36, 0
  6. 文字を参照: S, G, k, A
  7. 入力が2バイト(3バイトではない)のため、パディング文字 = を1つ追加

結果: "SGk="

なぜ6ビットなのか?

64 = 2⁶ なので、6ビットで 0-63 の値を表現でき、64文字のアルファベットに完全に対応します。3バイトの入力(24ビット)は4つの6ビットグループに均等に分割されるため、Base64 は3バイト単位でデータを処理します。

33% のサイズ増加:

Base64 は入力の3バイトごとに4文字の出力に変換するため、33% のサイズ増加が発生します。これはバイナリデータをテキストとして表現するための避けられないコストです。

パディングルール:

  • 3バイトの入力 -> 4つの Base64 文字(パディングなし)
  • 2バイトの入力 -> 3つの Base64 文字 + =
  • 1バイトの入力 -> 2つの Base64 文字 + ==

URL セーフ Base64: URL の特殊文字との衝突を避けるため、+- に、/_ に置き換えます。JWT、データ URI、URL パラメータで使用されます。

ユースケース

バックエンド開発者は、画像、証明書、暗号鍵などのバイナリアセットを JSON API レスポンス、設定ファイル、環境変数に埋め込むために Base64 エンコーディングを使用します。

Try It — Number Base Converter

フルツールを開く