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=

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説