Base64 エンコーディング方法
はじめに
この資料では RFC1521 で Base64 が定義されています。 Base64 は応用性が高く様々な状況で利用されているので、何かにつけて理解しておくとよいでしょう。
ここでは、Base64 エンコーディング方法について例を挙げて簡単に説明します。
1. エンコーディングルール
RFC1521 に以下のテーブルが定義されています。
Table 1: The Base64 Alphabet
0 A
17 R 34 i 51 z
1 B
18 S 35 j 52 0
2 C
19 T 36 k 53 1
3 D
20 U 37 l 54 2
4 E
21 V 38 m 55 3
5 F
22 W 39 n 56 4
6 G
23 X 40 o 57 5
7 H
24 Y 41 p 58 6
8 I
25 Z 42 q 59 7
9 J
26 a 43 r 60 8
10 K
27 b 44 s 61 9
11 L
28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
6 ビットごとに区切り、それをさらに4ずつにグルーピング。足りない部分は 0 でパディング。 それぞれの6ビットを上記の表に当てはめる。
例 1
"テスト" という文字列を Base64 エンコーディングしてみましょう。
"テスト" という文字列は Shift_JIS とすると文字コードは次の通りです。
83 65 83 58 83 67
これを二進数のビット列にすると次のようになります。
10000011 01100101 10000011 01011000 10000011 01100111
これを 6 ビットで区切ります。
100000 110110 010110 000011 010110 001000 001101 100111
さらに、6 ビットを 4 つずつグループ分けする。
100000 110110 010110 000011 | 010110 001000 001101 100111
通常、ここで端数が出るが、その場合は後ろを 0 で埋めます。
32 54 22 3 22 8 13 39
それぞれのパートを上表と照らし合わせて文字を対応付けします。
g 2 W D W I N n
以上から、最終的に次の文字列を得ます。
g2WDWINn
例 2
パディングを含む例として、"あ" 一文字を Base64 エンコードする場合は次のようになります。 手順は上記の例と同じなので解説を省きます。
82 A0
10000010 10100000
100000 101010 000000 000000
ここで、最後の 8 つの 0 はパディングとして付け足したもの。三つ目の 6 ビットは元のビットとパディングが含まれ、結果的に 0 と判定されるものであるのに対して、四つ目の 6 ビットは全てがパディングされたものです。 この場合同じ 0 でも、前者は 0 ("A") として、後者はパディング ("=") と解釈します。
32 42 0 =
g q A =
gqA=