base64

本文書はbase64についての簡単なメモ書きである。base64を実装する上で必要な事柄を簡単に記述している。
正確なbase64については、RFC 2045を参照されたい。

base64とは?

あらゆるデータを、64文字のプリンタブルな文字列(テキストデータ)に置き換えるためのデータエンコード方式の一つ。
データ量は、元データのおおよそ4/3倍(1.33倍)になる。
バイナリデータを扱えない状況で扱わざるを得ないときに便利。

base64の基本

バイナリデータ3バイトを、4文字のデータに置き換えます。具体的には以下のとおり。

バイナリデータ3バイトは以下のとおり。以下はビット列で示しています。
0000 0000 0000 0000 0000 0000
これを、6ビットづつ取り出し、6ビット*4つのデータに切り分けなおします。
0000 00 000000 0000 00 00 0000
6ビットのデータは、0から63で表すことが出来ます。で、6ビットのデータを以下の変換表にしたがって変換します。
変換表
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
A B C D E F G H I J K L M N O P Q R S T
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
U V W X Y Z a b c d e f g h i j k l m n
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
o p q r s t u v w x y z 0 1 2 3 4 5 6 7
60 61 62 63
8 9 + /
プログラムをするときは、以下の文字列を用いると便利です。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

簡単に具体例を。
3ビットのバイナリデータを用意します。例えばここで、0xff、0x10、0x84としましょう。
まず、ビット文字列に変換してみます。
1111 1111 0001 0000 1000 0100
これを、6ビットづつの4つに切り分けます。
111111 110001 000010 000100
わかりやすく、10進に直してみましょう。
63 49 2 4 つぎに、対応表にしたがって文字に変換します。
/ x C E ここから、「0xff、0x10、0x84」というバイナリが「/xCE」という文字列に変換されることになります。

ちなみに。バイナリデータが必ず3の倍数バイトとは限りません。1バイト、または2バイトのあまりが出る可能性もあります。
そんなときは=をもちいて、足りない分のデータを埋めます。
簡略化して「1バイトのデータのエンコード」をしてみましょう。
0000 0000 ---- ---- ---- ----
これを、6ビットづつ取り出し、6ビット*4つのデータに切り分けなおします。
0000 00 00---- ---- -- -- ----
一文字目はよいですね。二文字目は、「----」の部分を「0000」に置き換えてエンコードします。
3文字目と4文字目は、エンコードはせずに換わりに'='の文字を、それぞれ3文字目と4文字目にいれてあげます。
これで、問題なくエンコードが可能になります。

デコードは、原則として逆手順になるだけなので省略します。
ただ、デコード対象の文字列の長さが4の倍数で無い場合、また文字の後ろに=が一つないし二つついている場合の処理には気をつけてください。
戻る 
Copyright 2003 M-Fr Net All Right Reserved
E-Mail:info@m-fr.net