バイナリデータをUS-ASCIIにBASE64
BASE64符号化は、3個の1バイト(8ビット)の集合をUS-ASCIIで表示可能な文字4文字に変換する。バイナリデータを、電子メールで転送するのに適した形式にする仕組みだ。
図5に示すように、変換の対象となるデータを3バイト単位(8ビット×3=24ビット)で取り出し、6ビットずつ4つのパートに分ける。次に、分けたそれぞれのパートの6ビットの値を、表2に示すBASE64符号化の値と文字の対応表を参照しながら表示可能な文字に変換し、4文字のUS-ASCIIにする。
これはデータのバイト列全体が符号化されるまで繰り返され、符号化データが作られる。また符号化されたデータは、1行が76文字以下となるように「CRLF(復帰改行)」が挿入される。
なお、元のバイト列の最後に2バイトまたは1バイトの半端が残った場合、ちょうど3バイトとなるように値0のバイトが「パディング(padding、詰め物/埋め草)」される。
データを3バイトのまとまりにしたら、これをさらに6ビットずつ4つのパートに分ける。この際、パディングしたバイトから切り出された6ビットは値が0となる。この0をそのまま用いると、表2にあるとおり「0」は「A」に変換されるため、有効なデータと区別がつかなくなってしまう。そこで、パディングしたバイトから切り出された6ビットはパディング文字「=」に置き換えられる。
このように、BASE64符号化を使うと元のデータバイトよりサイズが大きくなる。しかし、すべてUS-ASCII文字に置き換えられるので、7ビット環境でも問題なく転送が可能になるわけだ。
●
次回は、MIME編の最後として、添付ファイルを実現する「マルチマート」などの仕組みを見ていこう。
この連載の記事
-
第9回
ネットワーク
いろいろな場所で同じメールを読めるIMAPの仕組みとは? -
第8回
ネットワーク
メールクライアントの動作からPOPのやりとりを見てみよう -
第7回
ネットワーク
メールの受信用に作られたPOPを学ぶ -
第6回
ネットワーク
SMTPの拡張機能を確かめる「EHLOコマンド」を知ろう! -
第5回
ネットワーク
メールを送る際に使われるSMTPの仕組みとは? -
第4回
ネットワーク
メールの添付ファイルを実現するMIMEのマルチパートとは? -
第2回
ネットワーク
メールの宛名はどこにある?ヘッダを理解する -
第1回
ネットワーク
電子メールを基礎の基礎から学んでいこう -
ネットワーク
電子メールプロトコル再入門<目次> - この連載の一覧へ