目次
Base64って何?
Base64とは、64種類の文字(アルファベット「 a~z , A~Z 」と数字「 0~9 」、一部の記号「 + , / 」)と末尾の記号「 = 」を用いて一定の規則に基づきデータを変換するエンコード方式(データを他の形式に変換する際の方式)の一つです。
上記図はBase64の変換イメージです。元データをBase64でエンコード(変換)することでBase64の文字列に変換することができます。そして、変換したBase64の文字列はデコード(元に戻す)することで、元のデータに戻ります。
Base64はなぜ必要なの?
電子メールは、SMTPなどの制約により7bit(ASCII)で表現される英数字しか送ることができません。そのため、画像などの添付ファイルをメールでやり取りすることができませんでした。
この問題を解決したのが、MIME(Multipurpose Internet Mail Extension:多目的インターネットメール拡張)と呼ばれる電子メールでさまざまなフォーマット(書式)を扱えるようにした規格です。
このMIMEの中でBase64というデータの変換方法が定められており、Base64を使うことで画像などの添付ファイルをメールで使うことができるようになりました。
スポンサーリンク
Base64は何に使われているの?
電子メール
電子メールは、先ほど説明した通り、7ビットの文字列以外をやり取りすることができません。そのため、添付ファイルのデータを送信する際にBase64が標準的に利用されています。
Basic認証
HTTPヘッダは特殊記号を使うことができません。そのため、Base64にエンコードした文字列が使用されています。
Authorization: Basic <BASE64エンコードしたユーザ名:パスワード>
ファイルアップロード
ファイルのアップロードは「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 | / |