コンピュータ

Base64とは

Base64って何?

Base64とは、64種類の文字(アルファベット「 a~z , A~Z 」と数字「 0~9 」、一部の記号「 + と / 」)と末尾の記号「 = 」を用いて一定の規則に基づきデータを変換するエンコード方式(データを他の形式に変換する際の方式)の一つです。

base64とは

上記図はBase64の変換イメージです。

変換前のデータをBase64でエンコード(変換)すると、Base64の文字列に変換できます。そして、変換したBase64の文字列をデコード(元に戻す)すると、変換前のデータに戻すことができます。

Base64はなぜ必要なの?

メールで使える文字は、ASCII文字(7bit文字)のみで、そのままでは日本語や画像などの添付ファイルを扱うことができません。

この問題を解決したのが「MIME(Multipurpose Internet Mail Extension)」や「ISO-2022-JP」です。MIMEでは、メール内容をメールが扱える形式(Base64など)に変換してから送信します。

次の図は、MIMEを利用したメール送信のイメージ例です。

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==

これで完成です。「ABCD」をBase64にエンコードすると「QUJD RA==」になることが分かりました。

[Base64 変換表]

10進数2進数文字
0000000A
1000001B
2000010C
3000011D
4000100E
5000101F
6000110G
7000111H
8001000I
9001001J
10001010K
11001011L
12001100M
13001101N
14001110O
15001111P
16010000Q
17010001R
18010010S
19010011T
20010100U
21010101V
22010110W
23010111X
24011000Y
25011001Z
26011010a
27011011b
28011100c
29011101d
30011110e
31011111f
32100000g
33100001h
34100010i
35100011j
36100100k
37100101l
38100110m
39100111n
40101000o
41101001p
42101010q
43101011r
44101100s
45101101t
46101110u
47101111v
48110000w
49110001x
50110010y
51110011z
521101000
531101011
541101102
551101113
561110004
571110015
581110106
591110117
601111008
611111019
62111110+
63111111/

helpful