目次
Base64って何?
Base64とは、64種類の文字(アルファベット「 a~z , A~Z 」と数字「 0~9 」、一部の記号「 + と / 」)と末尾の記号「 = 」を用いて一定の規則に基づきデータを変換するエンコード方式(データを他の形式に変換する際の方式)の一つです。
上記図はBase64の変換イメージです。
変換前のデータをBase64でエンコード(変換)すると、Base64の文字列に変換できます。そして、変換したBase64の文字列をデコード(元に戻す)すると、変換前のデータに戻すことができます。
Base64はなぜ必要なの?
メールで使える文字は、ASCII文字(7bit文字)のみで、そのままでは日本語や画像などの添付ファイルを扱うことができません。
この問題を解決したのが「MIME(Multipurpose Internet Mail Extension)」や「ISO-2022-JP」です。MIMEでは、メール内容をメールが扱える形式(Base64など)に変換してから送信します。
次の図は、MIMEを利用したメール送信のイメージ例です。
MIMEでは、メールの内容をBase64などにエンコードしてから送信します。そして 受信側は受け取った内容をデコードし、メールの内容を確認します。
このようにBase64は、日本語を使いたいが使えない、特殊記号を使いたいが使えないなど、使用できる文字に制限があるとき、その問題を解決するために利用されています。
スポンサーリンク
Base64は何に使われているの?
電子メール
上記で説明した通り、メールの送受信にはMIMEが使用されており、MIMEでは、メールの内容をBase64などにエンコードしてから送信します。
Basic認証
Basic認証(ベーシック認証)とは、HTTPで定義されてる認証方式の一つで、基本認証とも呼ばれています。
HTTPヘッダでは、特殊記号を使用することが出来ないため、次のようにユーザー名とパスワードをコロン (:) で区切ってBase64エンコードした文字列がBasic認証に用いられています。
Authorization: Basic <BASE64エンコードしたユーザ名:パスワード>
ファイルアップロード
Base64はファイルをアップロードするときに使用することもあります。
ファイルのアップロードは、HTMLフォームで画像などのデータを取り扱う「multipart/form-data」を使用することが多いですが、画像などのバイナリデータを、Base64にエンコードしたものをJSONに設定して送信する手法もよく使われています。
Base64への変換手順
それでは、Base64のエンコードがどのような手順で実施されているのかを見ていきます。
[手順1] 2進数に変換する
Base64にエンコードしたいデータを2進数に変換します。
変換した文字列:ABCD
↓
16進数:41, 42, 43, 44
↓
2進数:0100 0001, 0100 0010, 0100 0011, 0100 0100
[手順2] 6ビットずつに分割し、最後に「0」を付与
変換した2進数を6ビットずつに分割します。
そして、最後が2ビットとなり4ビット足りないので、最後も6ビットになるように「0」を追加します。
0100 0001, 0100 0010, 0100 0011, 0100 0100
↓
010000 010100 001001 000011 010001 000000
[手順3] 変換表の通りに4文字ずつ変換し、最後に「=」を付与
以下の変換表の通りに4文字ずつ変換していきます。そして、4文字に分けた時、最後が2文字分足りないので「=」を追加します。
010000 010100 001001 000011 010001 000000
↓
QUJD RA==
[Base64 変換表]
10進数 | 2進数 | 文字 |
0 | 000000 | A |
1 | 000001 | B |
2 | 000010 | C |
3 | 000011 | D |
4 | 000100 | E |
5 | 000101 | F |
6 | 000110 | G |
7 | 000111 | H |
8 | 001000 | I |
9 | 001001 | J |
10 | 001010 | K |
11 | 001011 | L |
12 | 001100 | M |
13 | 001101 | N |
14 | 001110 | O |
15 | 001111 | P |
16 | 010000 | Q |
17 | 010001 | R |
18 | 010010 | S |
19 | 010011 | T |
20 | 010100 | U |
21 | 010101 | V |
22 | 010110 | W |
23 | 010111 | X |
24 | 011000 | Y |
25 | 011001 | Z |
26 | 011010 | a |
27 | 011011 | b |
28 | 011100 | c |
29 | 011101 | d |
30 | 011110 | e |
31 | 011111 | f |
32 | 100000 | g |
33 | 100001 | h |
34 | 100010 | i |
35 | 100011 | j |
36 | 100100 | k |
37 | 100101 | l |
38 | 100110 | m |
39 | 100111 | n |
40 | 101000 | o |
41 | 101001 | p |
42 | 101010 | q |
43 | 101011 | r |
44 | 101100 | s |
45 | 101101 | t |
46 | 101110 | u |
47 | 101111 | v |
48 | 110000 | w |
49 | 110001 | x |
50 | 110010 | y |
51 | 110011 | z |
52 | 110100 | 0 |
53 | 110101 | 1 |
54 | 110110 | 2 |
55 | 110111 | 3 |
56 | 111000 | 4 |
57 | 111001 | 5 |
58 | 111010 | 6 |
59 | 111011 | 7 |
60 | 111100 | 8 |
61 | 111101 | 9 |
62 | 111110 | + |
63 | 111111 | / |