トップQs
タイムライン
チャット
視点

Base64

ウィキペディアから

Remove ads

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字バイナリデータを扱うためのエンコード方式である。当初PEM (RFC 1421) がPrintable Encodingという名で規定した仕様を、MIMEがBase64と名付け、RFC 3548RFC 4648 らが再度規定した[1]。7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。具体的には、AZaz09 の62種類の文字[注釈 1]と、2種類の記号 (+/)、さらにパディング(埋め草)のための記号として = が用いられる。この変換によって、データ量は4/3(約133%)となり[注釈 2]、増加する。また、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約137%となる[注釈 3]

Remove ads

変換形式

要約
視点

Base64変換の手順を以下に挙げる。

  1. 元データを6ビットずつに分割する。(6ビットに満たない分は後ろに0を追加して6ビットにする)
  2. 各6ビットの値を変換表を使って4文字ずつ変換する。
  3. 4文字に足りない分は = 記号を後ろに追加する。

変換例

さらに見る 段階, 状態 ...

変換表

6ビットのビット列に対して一つの文字を対応づけているだけである。

さらに見る ビット列 ...
Remove ads

主な利用例

電子メール

電子メールでは、SMTPなどの制約により、7ビット文字列以外をやり取りすることは出来ない。このため、添付ファイルなどのバイナリ形式のデータを送信する際に標準的に利用されている。

Basic認証

HTTPヘッダでは、特殊記号を使用することが出来ないため、ユーザー名とパスワードをコロン (:) で区切ってBase64エンコードした文字列がBasic認証に用いられている。

電子掲示板

インターネット上の電子掲示板では、文字列以外のバイナリデータの書き込みは基本的に不可能である。そこで、画像やテキスト文章を圧縮したファイルなどをやり取りするために、この形式が使用されることがある。

問題点

このエンコードを行うとデータ量が大きく増加するため、特に大きなファイルの送受信などをする場合は、電子メール以外の手段を利用したほうが格段に速い場合がある。また、英文の中に特殊文字が混じっているテキスト文章などは、特殊文字だけをエンコードした方がデータ効率が良く、デコードを行わなくても大体のデータが読めると言う利点がある。(Quoted-printable参照)

変形版

URLにBase64を含ませると、+/ が問題を引き起こすことがある。これらの文字がURLで特別な意味を持つために %h1h0[注釈 4]の形にエスケープする必要が生じるためである。 他にも、+/ が特別な意味をもつ個所(正規表現など)やその使用が制限される個所(XMLなど)でBase64を用いるときには、この2文字のかわりに !-. などを用いることがある。

さらに見る 変形, 62番目の文字 ...
Remove ads

注釈

  1. 元データを6ビット区切りにし、6ビットのそれぞれを印字可能な64文字の内の1文字に置き換える。その1文字1文字は8ビットなので、元の6ビットを8ビットで表現するわけである。よって、データ量は8/6つまり4/3となる。
  2. Base64エンコード後の1文字は、元のデータの6ビットを表現しているので、Base64エンコード後が76文字ということは、元のデータは、76 × 6ビット = 456ビット = 57バイトである。57バイトを76 + 2 = 78バイトで表現しているので、データ量は78 ÷ 57 ≒ 1.37 = 137%となる。
  3. h1h0 にはそれぞれ16進数の数字の一文字が入る。

脚注

関連項目

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads