Base64とは?仕組みとエンコード・デコードをわかりやすく解説

この記事の要点

文字列やファイルをすぐに変換したい方へ

UTF-8、Base64、Base64URLをブラウザ内で相互変換できます。

Base64変換ツールを使う

Base64とは何か

Base64は、画像やPDFなどのバイナリデータを、英数字と一部の記号からなるテキストへ変換する方式です。メール本文、JSON、HTML、CSSなど、バイナリをそのまま扱いにくい場所でデータを受け渡すために使われます。

エンコードしたデータはデコードすれば元のバイト列へ戻せます。ただし、これは暗号化ではありません。内容を秘密にする目的には使えない点が重要です。

Base64で使用する64文字

標準Base64は、次の64文字を0から63までの値に割り当てます。末尾調整用の=は64文字の中には含まれません。

文字個数
0~25A~Z26
26~51a~z26
52~610~910
62~63+/2

エンコード・デコードの仕組み

エンコードでは元データを3バイトずつ読み、24ビットを6ビット単位に分割します。6ビットで表せる値は0~63なので、それぞれをBase64文字へ置き換えられます。

元データをバイト列にする
3バイトずつ区切る
6ビットずつ4分割する
Base64文字へ置き換える

例:文字列「Man」

ASCIIのManは16進数で4D 61 6E、2進数では24ビットです。6ビットずつ区切ると値は19、22、5、46になり、対応する文字はTWFuです。

変換結果

ManTWFu

日本語の場合は、まず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の主な用途

よくある質問

Base64は何のために使いますか?

画像やファイルなどのバイナリデータを、テキストしか扱えない仕組みで安全に受け渡すために使います。

Base64は暗号化ですか?

いいえ。規則を知れば誰でも元に戻せるエンコード方式であり、機密性はありません。

Base64にするとデータは小さくなりますか?

通常は小さくなりません。3バイトを4文字で表すため、概ね33%大きくなり、Paddingや改行でさらに増える場合があります。

日本語もBase64に変換できますか?

はい。先にUTF-8などの文字コードでバイト列へ変換し、そのバイト列をBase64へエンコードします。