seclan のほえほえルーム

| |

BASE64 encoding

・
2000/12/20 []

 Base64 とは、uuencode を参考にして、新たに作成された、バイナリをテキストに変換する方式です。uuencode と比較すると、ISO 646 で問題になるような文字、例えば記号、が変換後の文字になるべく出現しないようになっています。RFC2045 (MIME Part One) で定義されています。

変換方法

  1. 文字列の先頭から順に 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  
  2. このビット列の 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 
  3. 表「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/」を引き、それぞれの対応文字を出力します。ただし、
    1. 一行に許される最大文字数は 76 文字 なので、それ以上になる場合には、改行します。
    2. もし 0x00 を 1個補っている場合、3 文字出力し、最終バイトは '=' を出力します。
    3. もし 0x00 を 2個補っている場合、2 文字出力し、最終バイトは '=' を二つ出力します。
  4. 入力文字列がなくなるまで繰返します。

変換例

  • 漢字 (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

関連


| |

 

配信

4.9 msec