4. Base 64 エンコーディング
以下の Base 64 の記述は、[3]、[4]、[5]、および [6] に由来しています。このエンコーディングは "base64" と呼ばれることもあります。
Base 64 エンコーディングは、任意のオクテット列を、大文字と小文字の両方を使用できるが人間には読みやすくない形式で表現することを意図しています。
US-ASCII の 65 文字の部分集合を使用することで、各印字可能文字が 6 ビットを表せるようにしています。(65 番目の文字 "=" は、特別な処理機能を表すために使用されます。)
エンコードプロセスは、入力ビットの 24 ビットのグループを、4 つのエンコード文字からなる出力文字列として表現します。左から右へ、3 つの 8 ビット入力グループを連結して 24 ビットの入力グループを形成します。次に、この 24 ビットを 4 つの連結された 6 ビットグループとして扱い、各 6 ビットグループを Base 64 アルファベットの文字に変換します。
各 6 ビットグループは、64 個の印字可能文字からなる配列のインデックスとして使用されます。そのインデックスが参照する文字が、出力文字列に配置されます。
表 1:Base 64 アルファベット
値 符号 値 符号 値 符号 値 符号
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 (パディング) =
15 P 32 g 49 x
16 Q 33 h 50 y
エンコードされるデータの末尾が 24 ビットに満たない場合、特別な処理が行われます。完全なエンコード量子は、常にデータブロックの末尾で完了します。入力グループで使用可能な入力ビットが 24 ビットに満たない場合、整数個の 6 ビットグループを形成するために、右側に値がゼロのビットが追加されます。データの末尾のパディングは '=' 文字で完了します。すべての Base 64 入力は整数個のオクテットであるため、以下のいずれかの場合のみが発生します:
(1) エンコードされる入力の最終量子が 24 ビットの整数倍である場合。このときエンコードされた出力の最終単位は 4 文字の整数倍となり、"=" のパディングはありません。
(2) エンコードされる入力の最終量子がちょうど 8 ビットである場合。このときエンコードされた出力の最終単位は、2 文字の後に 2 つの "=" パディング文字が続きます。
(3) エンコードされる入力の最終量子がちょうど 16 ビットである場合。このときエンコードされた出力の最終単位は、3 文字の後に 1 つの "=" パディング文字が続きます。