Base64とは?エンコードの方法などをわかりやすく解説!

この記事では『Base64』について、

  • Base64とは
  • Base64を使う理由
  • Base64の主な利用例
  • Base64の変換方法

などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。

Base64とは

Base64とは

Base64はエンコード方式(データを他の形式に変換する方式)の1つです。データを以下に示す64種類の文字を用いて一定の規則に基づいて変換します。

64種類の文字

  • アルファベット「a~z、A~Z」の52種類
  • 数字「0~9」の10種類
  • 記号「+, /」の2種類

ただ、実際にはデータ長を揃えるためにパディング(余った部分を詰める)として末尾に「=(イコール記号)」を使用しています。そのため、厳密にはBase64は65種類の文字で表現されています。

上図にBase64の変換イメージを示しています。元データをBase64でエンコード(変換)すると、Base64の文字列に変換できます。Base64は可逆的なので、Base64の文字列をデコード(元に戻す)できます。デコードすると、変換前のデータに戻すことができます。

補足

  • URLや正規表現において、記号「+, /」は特別な意味を持つことがあります。そのため、記号「+, /」の代わりに「-」や「_」などが用いられることがあります。
  • Base64は特にメールで使用されているエンコード方式です。

Base64を使う理由

Base64を使う理由

電子メールを送るためのプロトコルSMTPでは、ASCII文字(7ビットで表現される英数字)しか送ることができないため、電子メールを使って「日本語」や「画像や音声などの添付ファイル」を送ることができませんでした。

この問題を解決したのが、「MIME(Multipurpose Internet Mail Extensions)」です。

MIMEでは、送信側はメール内容をBase64でエンコードして送り、受信側では受け取った内容をデコードし、メール内容を確認します。

このように、MIMEではBase64を用いることで、メールで画像や音声などの送受信が可能になりました。

補足

  • Base64はMIMEによって規定されています。
  • Base64で変換することで、データ量は元の4/3(約133%)に増加します。なお、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れると、データ量は約137%に増加します。

Base64の主な利用例

Base64の主な利用例を以下に示します。

  • Basic認証
    • Basic認証はHTTPで定義されている認証方式の1つです。HTTPヘッダでは特定の特殊文字をそのまま使用することができません。そのため、ユーザー名とパスワードをコロンで結合した文字列(例: username:password)をBase64でエンコードした文字列をHTTPヘッダーに添付して送信します。受信サーバー側では、このBase64文字列をデコードして認証を行います。
  • ファイルアップロード
    • Webアプリケーションでのファイルアップロード時、ファイルの内容をBase64でエンコードしてサーバーに送信することがあります。サーバー側でデコードすることで元のファイルとして扱うことができます。
  • 電子掲示板
    • ユーザーがアップロードした画像データを直接データベースに保存する代わりに、Base64でエンコードした文字列をデータベースに保存することがあります。これにより、画像データをテキスト形式で扱うことができるため、データベースの操作が簡単になることがあります。

Base64の変換方法

Base64のエンコードは以下の手順で行われています。

Base64へのエンコード手順

  • Base64にエンコードしたいデータを2進数に変換する
  • 6ビットずつに分割する(6ビットに満たない分は後ろに「0」を追加する)
  • ビットを文字に変換後、4文字に分ける(4文字に満たない分は後ろに「=」を追加する)

Base64にエンコードしたいデータを2進数に変換する

まず、Base64にエンコードしたいデータを2進数に変換します。

エンコードしたいデータ:”ABCD”

16進数:41, 42, 43, 44

2進数:0100 0001, 0100 0010, 0100 0011, 0100 0100

6ビットずつに分割する(6ビットに満たない分は後ろに「0」を追加する)

変換した2進数を6ビットずつに分割します。今回の場合、最後が2ビットであり、6ビットに満たないので、「0」を4ビット追加します。

0100 0001, 0100 0010, 0100 0011, 0100 0100
↓6ビットずつに分割
010000, 010100, 001001, 000011, 010001, 00
↓最後が6ビットになるように「0」を追加
010000, 010100, 001001, 000011, 010001, 000000

ビットを文字に変換後、4文字に分ける(4文字に満たない分は後ろに「=」を追加する)

以下に示す「Base64の変換表」を用いて、ビットを文字に変換後、4文字に分けます。今回の場合、最後が2文字であり、4文字に満たないので、「=」を2文字追加します。

010000, 010100, 001001, 000011, 010001, 000000
↓ビットを文字に変換
“Q”, ”U”, ”J”, ”D”, ”R”, ”A
↓4文字に分ける
“QUJD”, “RA”
↓最後が4文字になるように「=」を追加
“QUJD”, “RA==”
↓文字を連結
“QUJDRA==”

以上で変換が完了です。「ABCD」をBase64でエンコードすると、「QUJDRA==」になることが分かりました。

Base64の変換表

2進数Base64文字
000000A
000001B
000010C
000011D
000100E
000101F
000110G
000111H
001000I
001001J
001010K
001011L
001100M
001101N
001110O
001111P
010000Q
010001R
010010S
010011T
010100U
010101V
010110W
010111X
011000Y
011001Z
011010a
011011b
011100c
011101d
011110e
011111f
100000g
100001h
100010i
100011j
100100k
100101l
100110m
100111n
101000o
101001p
101010q
101011r
101100s
101101t
101110u
101111v
110000w
110001x
110010y
110011z
1101000
1101011
1101102
1101113
1110004
1110015
1110106
1110117
1111008
1111019
111110+
111111/

本記事のまとめ

この記事では『Base64』について、以下の内容を説明しました。

  • Base64とは
  • Base64を使う理由
  • Base64の主な利用例
  • Base64の変換方法

お読み頂きありがとうございました。