BASE32
RFC 4648 The Base16, Base32, and Base64 Data Encodings
https://tex2e.github.io/rfc-translater/html/rfc4648.html
RFC 3548 (廃止)
8bitx5 40bit を 5bit x8文字で表現する符号化方式
A-Z, 2-7 で 26 + 6 = 32
0とO, 1とI, 8とBなど間違いやすい文字を除く5bit符号化
BASE32HEXはHEX(16進数)を拡張してVまで32文字使えるようにしたもの
他に仮想通貨で使われるBech32, Crockfords などの文字並びがある
RFC 4648
概要
このドキュメントでは、一般的に使用されているBase64、Base32、およびBase16のエンコード方式について説明します。また、エンコードされたデータにおける改行の使用、エンコードされたデータにおけるパディングの使用、エンコードされたデータにおける非アルファベット文字の使用、異なるエンコードアルファベットの使用、および標準的なエンコードについても説明します。
6. Base 32エンコーディング
以下のBase 32に関する説明は、11(修正を含む)に基づいています。このエンコーディングは「Base 32」と呼ばれることがあります。
11 Myers, J., "SASL GSSAPI mechanisms", Work in Progress, May 2000.
Base 32エンコーディングは、大文字と小文字を区別しない形式で任意のオクテット列を表すように設計されていますが、人間が判読できる必要はありません。
US-ASCIIの33文字のサブセットが使用され、印字可能な文字ごとに5ビットで表現できます。(33番目の追加文字「=」は、特別な処理機能を示すために使用されます。)
エンコーディング処理では、40ビットの入力ビットのグループを、8つのエンコードされた文字からなる出力文字列として表現します。左から右へ進むと、5つの8ビットの入力グループを連結することで、40ビットの入力グループが形成されます。これらの40ビットは、8つの連結された5ビットのグループとして扱われ、各グループはBase 32アルファベットの1文字に変換されます。ビットストリームをBase32エンコード方式でエンコードする場合、ビットストリームは最上位ビットを先頭に並べられているものとみなされます。つまり、ストリームの最初のビットは最初の8ビットバイトの上位ビットとなり、8番目のビットは最初の8ビットバイトの下位ビットとなり、以下同様に続きます。
各5ビットグループは、32文字の印字可能文字の配列へのインデックスとして使用されます。インデックスで参照される文字が出力文字列に配置されます。これらの文字は、以下の表3に示すように、US-ASCIIの数字と大文字から選択されます。
table:表3:32進アルファベット
値 エンコード 値 エンコード 値 エンコード 値 エンコード
0 A 9 J 18 S 27 3
1 B 10 K 19 T 28 4
2 C 11 L 20 U 29 5
3 D 12 M 21 V 30 6
4 E 13 N 22 W 31 7
5 F 14 O 23 X
6 G 15 P 24 Y (パディング) =
7 H 16 Q 25 Z
8 I 17 R 26 2
エンコード対象のデータの末尾で利用可能なビット数が40ビット未満の場合、特別な処理が実行されます。エンコード量子は常に本体の末尾で完了します。入力グループで利用可能な入力ビット数が40ビット未満の場合、値0のビットが(右側に)追加され、5ビットのグループが整数個形成されます。データ末尾のパディングは「=」文字を使用して行われます。 32進数の入力はすべてオクテットの整数倍であるため、以下のケースのみが発生します。
(1) エンコード入力の最終量子が40ビットの整数倍である場合、エンコード出力の最終単位は「=」パディングなしの8文字の整数倍になります。
(2) エンコード入力の最終量子がちょうど8ビットである場合、エンコード出力の最終単位は2文字とそれに続く6文字の「=」パディング文字になります。
(3) エンコード入力の最終量子がちょうど16ビットである場合、エンコード出力の最終単位は4文字とそれに続く4文字の「=」パディング文字になります。
(4) エンコード入力の最終量子がちょうど24ビットである場合、エンコード出力の最終単位は5文字とそれに続く3文字の「=」パディング文字になります。
(5) エンコード入力の最終量子がちょうど32ビットである場合、エンコード出力の最終単位は7文字とそれに続く1文字の「=」パディング文字になります。
7. 拡張16進アルファベットを用いたBase32エンコーディング
Base32に関する以下の説明は7に由来する。このエンコーディングは「base32hex」と呼ばれることもある。このエンコーディングは「base32」エンコーディングと同一視されるべきではなく、また単に「base32」とだけ呼ばれるべきでもない。このエンコーディングは、例えばNextSECure3 (NSEC3) 10で使用されている。
7 Klyne, G. and L. Masinter, "Identifying Composite Media Features", RFC 2938, September 2000.
10 Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNSSEC Hash Authenticated Denial of Existence", Work in Progress, June 2006.
このアルファベットの特性の一つは、Base64やBase32のアルファベットにはない、エンコードされたデータをビット単位で比較した際に、エンコードされたデータのソート順序が維持されるという点である。
このエンコーディングは、アルファベットを除いて前のエンコーディングと同一である。新しいアルファベットは表4に示されています。
table:表4:「拡張16進数」の32進アルファベット
値 エンコード 値 エンコード 値 エンコード 値 エンコード
0 0 9 9 18 I 27 R
1 1 10 A 19 J 28 S
2 2 11 B 20 K 29 T
3 3 12 C 21 L 30 U
4 4 13 D 22 M 31 V
5 5 14 E 23 N
6 6 15 F 24 O (パッド) =
7 7 16 G 25 P
8 8 17 H 26 Q