「Base64」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
2404:7A81:A6A0:F00:2C9A:365A:AC9B:530E (会話) による ID:76664997 の版を取り消し 変換表が荒らされていたため
タグ: 取り消し
133行目: 133行目:
* [https://tools.ietf.org/html/rfc4648 The Base16, Base32, and Base64 Data Encodings] - [[IETF]]による規格書(英語)。RFC 4648。
* [https://tools.ietf.org/html/rfc4648 The Base16, Base32, and Base64 Data Encodings] - [[IETF]]による規格書(英語)。RFC 4648。
** [http://www5d.biglobe.ne.jp/~stssk/rfc/rfc4648j.html ベース64とベース32とベース16コード化] - 上記の参考和訳。
** [http://www5d.biglobe.ne.jp/~stssk/rfc/rfc4648j.html ベース64とベース32とベース16コード化] - 上記の参考和訳。
* [https://onlinebase64tools.org/ The Base16, Base32, and Base64 Data Encodings] - [[IETF]]による規格書(英語)。[https://onlinebase64tools.org/ RFC 4648]。
** [https://onlinebase64tools.org/ ベース64とベース32とベース16コード化] - 上記の参考和訳。


{{internet-stub}}
{{internet-stub}}

2020年8月26日 (水) 14:22時点における版

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字バイナリデータを扱うためのエンコード方式である。MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。具体的には、AZ, az, 09 までの62文字と、記号2つ (+, /)、さらにパディング(余った部分を詰める)のための記号として = が用いられる。この変換によって、データ量は4/3(約133%)になる[1]。また、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約137%となる[2]

変換形式

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

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

変換例

  1. 元データ
    • 文字列: "ABCDEFG"
    • 16進表現: 41, 42, 43, 44, 45, 46, 47
    • 2進表現: 0100 0001, 0100 0010, 0100 0011, 0100 0100, 0100 0101, 0100 0110, 0100 0111
  2. 6ビットずつに分割
    • 010000 010100 001001 000011 010001 000100 010101 000110 010001 11
  3. 2ビット余るので、4ビット分0を追加して6ビットにする
    • 010000 010100 001001 000011 010001 000100 010101 000110 010001 110000
  4. 変換表により、4文字ずつ変換
    • "QUJD", "REVG", "Rw"
  5. 2文字余るので、2文字分 = 記号を追加して4文字にする
    • "QUJD", "REVG", "Rw=="
  6. Base64文字列
    • "QUJDREVGRw=="

変換表

10進 2進 文字 10進 2進 文字 10進 2進 文字 10進 2進 文字
0 000000 A 16 010000 Q 32 100000 g 48 110000 w
1 000001 B 17 010001 R 33 100001 h 49 110001 x
2 000010 C 18 010010 S 34 100010 i 50 110010 y
3 000011 D 19 010011 T 35 100011 j 51 110011 z
4 000100 E 20 010100 U 36 100100 k 52 110100 0
5 000101 F 21 010101 V 37 100101 l 53 110101 1
6 000110 G 22 010110 W 38 100110 m 54 110110 2
7 000111 H 23 010111 X 39 100111 n 55 110111 3
8 001000 I 24 011000 Y 40 101000 o 56 111000 4
9 001001 J 25 011001 Z 41 101001 p 57 111001 5
10 001010 K 26 011010 a 42 101010 q 58 111010 6
11 001011 L 27 011011 b 43 101011 r 59 111011 7
12 001100 M 28 011100 c 44 101100 s 60 111100 8
13 001101 N 29 011101 d 45 101101 t 61 111101 9
14 001110 O 30 011110 e 46 101110 u 62 111110 +
15 001111 P 31 011111 f 47 101111 v 63 111111 /

主な利用例

電子メール

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

Basic認証

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

電子掲示板

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

問題点

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

変形版

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

変形 62番目の文字 63番目の文字 パディング 1行が固定長か 行の最大長 改行文字 指定された文字以外を使えるかどうか 行のチェックサム
オリジナルの Privacy-Enhanced Mail (PEM) の Base64
(RFC 1421, deprecated)
+ / =
(必須)
はい
(最終行を除く)
64 CR+LF 禁止 (なし)
MIME の Base64 転送エンコーディング
(RFC 2045)
+ / =
(必須)
いいえ
(可変)
76 CR+LF 許可
(破棄される)
(なし)
RFC 3548RFC 4648 の標準の 'Base64' エンコーディング + / =
(必須)
はい
(最終行を除く)
64 または 76
(改行が必要な場合のみ)
CR+LF
(改行が必要な場合のみ)
禁止 (なし)
OpenPGP用「Radix-64」
(RFC 4880)
+ / =
(必須)
いいえ
(可変)
76 CR+LF 禁止 24ビットCRC
(Radix-64-encoded, including one pad character)
UTF-7 のための変形 Base64
(RFC 1642, obsoleted)
+ / (なし) いいえ
(可変)
(なし) (なし) 禁止 (なし)
ファイル名のための変形 Base64
(非標準)
+ - (なし) いいえ
(可変)
(ファイルシステムの限界、一般には255) (なし) 禁止 (なし)
URLアプリケーションのための変形 Base64
('base64url' encoding)
- _ (なし) いいえ
(可変)
アプリケーション依存 (なし) 禁止 (なし)
XML名前トークン向け修正Base64
(Nmtoken)
. - (なし) いいえ
(可変)
XML パーサー依存 (なし) 禁止 (なし)
XML識別子向け修正Base64
(Name)
_ : (なし) いいえ
(可変)
XML パーサー依存 (なし) 禁止 (なし)
プログラム識別子向け修正Base64
(変種1,非標準)
_ - (なし) いいえ
(可変)
言語・システム依存 (なし) 禁止 (なし)
プログラム識別子向け修正Base64
(変種2,非標準)
. _ (なし) いいえ
(可変)
言語・システム依存 (なし) 禁止 (なし)
正規表現のための変形 Base64
(非標準)
! - (なし) いいえ
(可変)
アプリケーション依存 (なし) 禁止 (なし)

脚注

  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%となる。

関連項目

外部リンク