BASE64

戻る

電子メールの送信手段であるSMTP(Simple Mail Transfer Protocol)では、8ビット(バイナリ)の送信は原則として禁止されている。ESMTP(Enhanced SMTP)を使うことで8ビット送信が可能になるとのことだが、互換性の問題もあるため、送信側で7ビットのキャラクタに変換(エンコード)され、受信側で元の8ビットデータに復元(デコード)することが必要である。

8ビットデータを7ビットキャラクタに変換する方法はいくつかあるが、インターネットでの電子メールを使う場合は、BASE64とQuoted-Printableが標準的である。その他の方法としては、Macintoshで標準的に用いられるBinHEXや、UNIXで多く用いられるuuencodeなどがある。

BASE64は、3バイトのデータ毎に、4つの文字に変換していく方法である。Quoted-Printableは、1バイトの文字を、イコール記号と16進数表示であらわす(例:「=0D」)方法である。エンコーディングにより、BASE64では元のデータの3分の4に容量が増え、Quoted-Printableでは3倍になってしまう。以下に、BASE64エンコードについて、解説する。

BASE64のエンコードは下記のステップで行われる。

  1. 元データを3バイト(24ビット)毎として扱う
  2. この24ビットを、6ビット毎のデータに分ける
    半端な部分は0で埋める
  3. それぞれのデータ示す値に応じて、文字に変換する
    0〜25:A〜Z、26〜51:a〜z、52〜61:0〜9、62:+、63:/
  4. 上記を全データに対して繰り返す
  5. 4文字ずつにならない部分を「=」で埋める

ここでエンコードするデータは、「Hello」をあらわす「48 , 65 ,6C , 6C , 6F」という5バイトである。(本来はエンコードする必要は無いが..)

変換ステップデータ
元データ(16進表示) 48 , 65 , 6C 6C , 6F
48 65 6C 6C 6F
ビット毎の認識 01001000 01100101 01101100 01101100 01101111 00
6ビット毎データ(10進表示) 18 6 21 44 27 6 60
文字での置き換え S G V s b G 8
端数を埋める SGVsbG8=

メールリーダの機能を制限して良いのであれば、これらのデコード機能を実装する必要もなくなる。つまり、MIME機能を持たせないという意味であり、ヘッダ部に日本語表記した場合の表示機能と、ファイル添付機能が実現できなくなる。(諦めてしまうのもひとつの手)


ProtocolNameRFC
MIMEMultipurpose Internet Mail Extensions2045