2000/12/20 [水]
Base64 とは、uuencode を参考にして、新たに作成された、バイナリをテキストに変換する方式です。uuencode と比較すると、ISO 646 で問題になるような文字、例えば記号、が変換後の文字になるべく出現しないようになっています。RFC2045 (MIME Part One) で定義されています。
変換方法
- 文字列の先頭から順に 3 文字単位で変換を行います。任意の時点の 3 つ文字 ABC のビットを次のように表現します。ただし、3 文字に足りない場合には、残りの文字として 0x00 を補います。そして補った個数を記憶しておきます。
A7 A6 A5 A4 A3 A2 A1 A0 B7 B6 B5 B4 B3 B2 B1 B0 C7 C6 C5 C4 C3 C2 C1 C0
- このビット列の MSB から 6 bit 毎に切り出し、上位 2 bit を 0 にしたバイト列にします。
0 0 A7 A6 A5 A4 A3 A2 0 0 A1 A0 B7 B6 B5 B4 0 0 B3 B2 B1 B0 C7 C6 0 0 C5 C4 C3 C2 C1 C0
- 表「ABCDEFGHIJKLMN
OPQRSTUVWXYZ abcdefghijklmn opqrstuvwxyz 0123456789+/」を引き、それぞれの対応文字を出力します。ただし、 - 一行に許される最大文字数は 76 文字 なので、それ以上になる場合には、改行します。
- もし 0x00 を 1個補っている場合、3 文字出力し、最終バイトは '=' を出力します。
- もし 0x00 を 2個補っている場合、2 文字出力し、最終バイトは '=' を二つ出力します。
- 入力文字列がなくなるまで繰返します。
変換例
- 漢字 (0x22 0x6F 0x57 0x5B) → (3 の倍数にする)
0x22 0x6F 0x57 0x5B 0x00 0x00 → (ビット表記)
0010_0010 0110_1111 0101_0111 0101_1011 0000_0000 0000_0000 → (6 bit 毎に分解)
001000 100110 111101 010111 010110 110000 000000 000000→ (16 進数による表記)
0x08 0x26 0x3D 0x17 0x16 0x30 0x00 0x00 → (変換: 2 個 0x00 を補ったので 2 つの 0x00 は '=' に)
I m 9 X W w = = →
"Im9XWw=="
by seclan