私たちは,電子メールに画像やデータ・ファイルを添付してやりとりするのは当たり前だと思っている。しかし,メールは昔から,アルファベットや数字からなる7ビットASCIIのテキスト以外は送れない仕様になっている。電子メールで画像などのバイナリ・ファイルをやりとりする裏側では,「MIME」(multipurpose internet mail extensions)というしくみが働いている。実際にバイナリ・ファイルをASCIIのテキスト・ファイルに変換する場面では「Base64」という技術が使われる。今回は,このBase64のしくみを見ていこう。

 Base64は,どんなデータもASCIIの文字列に変換するエンコード法である。Base64では,まず元のデータをビット列に戻してから6ビットごとに区切る。末尾が6ビットに足りなければ,0を補填して6ビットにする。そして6ビットごとにあらかじめ決められたASCIIコードの文字に置き換える。

 6ビットのビット列には2の6乗=64種類のパターンがある。Base64ではこの64種類のそれぞれにASCIIコードの文字を割り当ててある。こうすれば,どんなデータでもASCIIの文字列に変換できるわけだ。

 現在,電子メールにバイナリ・ファイルを添付して送るときは,Base64が使われる。ただ,古くは「uuencode」というエンコード法が使われていたことがある。このuuencodeでバイナリ・ファイルをASCIIの文字列に変換すると,トラブルを起こすメール・システムがあった。理由は,uuencodeで変換した文字列には,「 」(スペース)のほか,メールのヘッダー部分で特別な意味を持たせて使われる「@」や「?」,「:」が現れることがあり,これらの文字がシステムを誤動作させることがあったのだ。

 そこでBase64では,64種類の文字の選び方を工夫した。アルファベットの大文字と小文字の合計52文字と数字10文字,さらに「+」と「/」を加えた64種類の文字を使う。そのほか,最後の文字数の調整には「=」を使う。メール・システムなどに誤動作を引き起こす可能性のある文字は意識的に除いたのである。

山田 剛良