電子メール(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を単体で使用してはいけません。