Base64アルファベット

64文字のBase64アルファベット(A-Z, a-z, 0-9, +, /)を詳しく解説。各文字と6ビット値のマッピング、Base64urlなどの変種、エンコードの仕組みを紹介します。

Concept

詳細な説明

Base64エンコーディングスキームは、データを表現するために正確に64文字を使用し、さらにパディング用のオプションの65番目の文字(=)があります。RFC 4648で定義されている標準アルファベットは以下の通りです:

Value  Char    Value  Char    Value  Char    Value  Char
  0     A       16     Q       32     g       48     w
  1     B       17     R       33     h       49     x
  2     C       18     S       34     i       50     y
  3     D       19     T       35     j       51     z
  4     E       20     U       36     k       52     0
  5     F       21     V       37     l       53     1
  6     G       22     W       38     m       54     2
  7     H       23     X       39     n       55     3
  8     I       24     Y       40     o       56     4
  9     J       25     Z       41     p       57     5
 10     K       26     a       42     q       58     6
 11     L       27     b       43     r       59     7
 12     M       28     c       44     s       60     8
 13     N       29     d       45     t       61     9
 14     O       30     e       46     u       62     +
 15     P       31     f       47     v       63     /

なぜ64なのか? 64は2^6であり、各Base64文字がちょうど6ビットのデータを表すことを意味します。この2のべき乗の関係がエンコーディングスキームを効率的かつ可逆的にしています。3つの入力バイト(24ビット)は4つのBase64文字(4 x 6 = 24ビット)に完全にマッピングされ、ビットの無駄がありません。

なぜこれらの特定の文字なのか? 62個の英数字(A-Z, a-z, 0-9)は、事実上すべてのテキストベースシステムで安全に使用できます。残りの2文字(+/)は印刷可能なASCIIであるために選ばれました。ただし、URL(+ はスペースを意味し、/ はパス区切り文字)やファイル名(/ はディレクトリ区切り文字)では問題を引き起こします。

バリエーション・アルファベット:

  • Base64url(RFC 4648 Section 5):+- に、/_ に置換。JWTやURLパラメータで使用。
  • ファイル名用Base64(一部で使用):+- に、/_ に置換。Base64urlと同じ。
  • XML識別子用Base64+. に、/_ に置換。
  • 正規表現用Base64+! に、/- に置換。

大文字小文字の区別: Base64は大文字小文字を区別します。A(値0)と a(値26)は異なる6ビット値を表します。大文字小文字を区別しないマッチングを行うデコーダーは不正な出力を生成します。これは、Base64文字列がテキストを小文字に正規化するシステムを通過する際によくあるバグの原因です。

ユースケース

デコードを試みる前に、すべての文字が有効なBase64アルファベットに属するかを確認して、Webフォームのユーザー入力Base64文字列をバリデーションする場合に使用します。

試してみる — Base64 Encoder

フルツールを開く