この記事では『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を使う理由
電子メールを送るためのプロトコル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文字 |
000000 | A |
000001 | B |
000010 | C |
000011 | D |
000100 | E |
000101 | F |
000110 | G |
000111 | H |
001000 | I |
001001 | J |
001010 | K |
001011 | L |
001100 | M |
001101 | N |
001110 | O |
001111 | P |
010000 | Q |
010001 | R |
010010 | S |
010011 | T |
010100 | U |
010101 | V |
010110 | W |
010111 | X |
011000 | Y |
011001 | Z |
011010 | a |
011011 | b |
011100 | c |
011101 | d |
011110 | e |
011111 | f |
100000 | g |
100001 | h |
100010 | i |
100011 | j |
100100 | k |
100101 | l |
100110 | m |
100111 | n |
101000 | o |
101001 | p |
101010 | q |
101011 | r |
101100 | s |
101101 | t |
101110 | u |
101111 | v |
110000 | w |
110001 | x |
110010 | y |
110011 | z |
110100 | 0 |
110101 | 1 |
110110 | 2 |
110111 | 3 |
111000 | 4 |
111001 | 5 |
111010 | 6 |
111011 | 7 |
111100 | 8 |
111101 | 9 |
111110 | + |
111111 | / |
本記事のまとめ
この記事では『Base64』について、以下の内容を説明しました。
- Base64とは
- Base64を使う理由
- Base64の主な利用例
- Base64の変換方法
お読み頂きありがとうございました。