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
|
プログラムをするときは、以下の文字列を用いると便利です。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
簡単に具体例を。
3ビットのバイナリデータを用意します。例えばここで、0xff、0x10、0x84としましょう。
まず、ビット文字列に変換してみます。
| 1111 1111
| 0001 0000
| 1000 0100
|
これを、6ビットづつの4つに切り分けます。
| 111111
| 110001
| 000010
| 000100
|
わかりやすく、10進に直してみましょう。
つぎに、対応表にしたがって文字に変換します。
ここから、「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