Base64とは?仕組みとエンコード・デコードをわかりやすく解説
この記事の要点
- Base64はバイナリデータを64種類の文字で表すエンコード方式です。
- 3バイト(24ビット)を6ビットずつ4分割して文字へ置き換えます。
- 暗号化や圧縮ではなく、データ量は通常約33%増えます。
Base64とは何か
Base64は、画像やPDFなどのバイナリデータを、英数字と一部の記号からなるテキストへ変換する方式です。メール本文、JSON、HTML、CSSなど、バイナリをそのまま扱いにくい場所でデータを受け渡すために使われます。
エンコードしたデータはデコードすれば元のバイト列へ戻せます。ただし、これは暗号化ではありません。内容を秘密にする目的には使えない点が重要です。
Base64で使用する64文字
標準Base64は、次の64文字を0から63までの値に割り当てます。末尾調整用の=は64文字の中には含まれません。
| 値 | 文字 | 個数 |
|---|---|---|
| 0~25 | A~Z | 26 |
| 26~51 | a~z | 26 |
| 52~61 | 0~9 | 10 |
| 62~63 | +、/ | 2 |
エンコード・デコードの仕組み
エンコードでは元データを3バイトずつ読み、24ビットを6ビット単位に分割します。6ビットで表せる値は0~63なので、それぞれをBase64文字へ置き換えられます。
例:文字列「Man」
ASCIIのManは16進数で4D 61 6E、2進数では24ビットです。6ビットずつ区切ると値は19、22、5、46になり、対応する文字はTWFuです。
Man → TWFu
日本語の場合は、まずUTF-8などの文字コードでバイト列へ変換します。同じ見た目の文字列でも、文字コードが異なればBase64の結果も変わります。
末尾の「=」Paddingの意味
元データが3バイト単位で終わらないとき、Base64は出力を4文字単位にそろえるため、末尾へ=を付けます。これをPaddingと呼びます。
| 元データの余り | 出力例 | Padding |
|---|---|---|
| 0バイト | TWFu | なし |
| 1バイト | TQ== | == |
| 2バイト | TWE= | = |
Base64URLなどではPaddingを省略することがあります。デコード側が省略を許容するか、利用する仕様を確認してください。
Base64にするとサイズが増える理由
元の3バイトを4文字で表現するため、Base64本体は元データのおよそ4/3、つまり約33%大きくなります。さらにPadding、改行、Data URLのMIME情報が加わる場合もあります。
Base64は圧縮方式ではありません。画像をHTMLへ埋め込むと通信回数を減らせる一方、HTMLやCSS自体は大きくなります。
Base64の主な用途
- メールで画像や添付ファイルを表現する
- JSONやXMLでバイナリデータを受け渡す
- 画像をData URLとしてHTMLやCSSへ埋め込む
- HTTP Basic認証のユーザー名とパスワードを表現する
- JWTの各部分をBase64URLで表現する
よくある質問
Base64は何のために使いますか?
画像やファイルなどのバイナリデータを、テキストしか扱えない仕組みで安全に受け渡すために使います。
Base64は暗号化ですか?
いいえ。規則を知れば誰でも元に戻せるエンコード方式であり、機密性はありません。
Base64にするとデータは小さくなりますか?
通常は小さくなりません。3バイトを4文字で表すため、概ね33%大きくなり、Paddingや改行でさらに増える場合があります。
日本語もBase64に変換できますか?
はい。先にUTF-8などの文字コードでバイト列へ変換し、そのバイト列をBase64へエンコードします。