Curious TechieDev Toolbox
すべてのガイド/エンコード & 暗号化8 min read

Base64 エンコード完全技術ガイド

Base64の基礎、6ビット変換アルゴリズムの仕組み、URLセーフ形式、そしてなぜ暗号化ではないのかを徹底解説。

重要ポイント (要約)
  • Base64は、RFC 4648で定義された64種類のASCII文字を用いるバイナリ-テキスト変換方式です。
  • 3バイト(24ビット)を4つの6ビット文字に変換するため、データサイズは約33%増加します。
  • Base64は暗号化ではありません。誰でも簡単に元の平文に復元できます。
  • URLセーフ版では+-に、/_に置換してURL崩れを防ぎます。

電子メール(SMTP)やURLクエリ文字列などのデジタル通信路は、本来7ビットのASCIIテキストのみを伝送するように設計されていました。画像、添付ファイル、電子署名などの生バイナリデータ(8ビット)を安全に送信するために開発されたのがBase64エンコードです。

1. Base64とは何か?

Base64は、RFC 4648で標準化されたエンコード仕様です。任意のバイナリバイト列を、印字可能な64種類のASCII文字(大文字A-Z、小文字a-z、数字0-9、および+/の2記号)の集合へと安全にマッピングします。

2. 3バイトから4文字へ変換する数学的メカニズム

Base64アルゴリズムは入力データを24ビット(3バイト)単位のブロックにまとめます。この24ビットを4つの6ビットグループ(2^6 = 64値)に分割し、各数値をBase64変換テーブルのインデックスとして対応文字に変換します:

入力3バイト: [01001101] [01100001] [01101110] (24ビット = "Man")
出力4分割: [010011] [010110] [000101] [101110]
Base64索引値: 19 22 5 46
Base64出力: T W F u => "TWFu"

3. なぜイコール記号(=)のパディングが必要なのか

入力データのバイト長が3の倍数でない場合、エンコーダは余白にゼロビットを追加して6ビットグループを完成させ、末尾に1個または2個のイコール記号(=)をパディングとして付加し、デコード側が正確なバイト長を復元できるようにします。

4. URLセーフBase64仕様

標準Base64に含まれる +/ はURLにおいて特別な予約文字の意味を持ちます。JWTやOAuth等で使われるURLセーフBase64では、+- に、/_ に置換し、末尾の = パディングを省略することが一般的です。

5. 「Base64暗号化」という誤解

Base64は暗号化ではありません。 秘密鍵や数学的な障壁は一切なく、Base64文字列を入手した者は誰でも瞬時に平文に復元できます。機密情報やパスワードの保護にBase64を単体で使用してはいけません。