使い方
- テキストを Base32hex にするには「エンコード」を、Base32hex をテキストに戻すには「デコード」を選択します。
- 「種類」は Base32hex のままにします。形式に応じて「パディング」をオフにしたり、「小文字」に切り替えたりします。
- テキストを入力または貼り付けるか、ファイルを開きます。結果は入力に合わせてリアルタイムに更新されます。
- 結果をコピーするか、ファイルとしてダウンロードします。
Base32hex とは
Base32hex は、RFC 4648 の第 7 節で「Base 32 Encoding with Extended Hex Alphabet」(拡張16進アルファベットによる Base32 エンコード)として定義されています。仕組みは標準の Base32 とまったく同じで、1 文字が 5 ビットを表し、5 バイトごとに 8 文字になり、出力は = で 8 文字の倍数になるようパディングされます。違うのはアルファベットだけです。A-Z 2-7 の代わりに、Base32hex は16進数の続きを数えます。数字の 0~9 は 0~9 を、A は 10 を、V は 31 を表します。
2 つのアルファベットは大部分の文字が共通なので、Base32hex の文字列を標準の Base32 デコーダーに渡してもエラーにならないことがよくありますが、得られるバイト列は誤ったものになります。必ずエンコードに使ったのと同じ種類でデコードしてください。
並び順が保たれる
アルファベットは ASCII の昇順に並んでおり、各文字の値は位置とともに大きくなります。そのため、2 つの Base32hex 文字列を 1 文字ずつ比較すると、元のバイト列を比較した場合と同じ順序になります。RFC 4648 はこれを標準の Base32 や Base64 にはない特性として挙げており、データベースやキーバリューストアなど、ソートされたストレージのキーに Base32hex が適しているのはこのためです。
すべての文字列で大文字・小文字をそろえ、入力の長さが異なる場合はパディングをオフにしてください。= は数字と文字の間に並ぶため、順序が崩れることがあります。
DNSSEC NSEC3 での Base32hex
RFC 5155 で定義されている NSEC3 レコードは、ゾーン内のすべての名前を列挙しにくくしつつ、DNS 名が存在しないことを証明します。各名前は SHA-1 でハッシュ化され、20 バイトのハッシュはパディングなしの 32 文字の Base32hex ラベルとして書かれ、通常は小文字で表示されます。このエンコードはハッシュの順序を保つため、ハッシュ化された名前はソートされたチェーンを形成します。ハッシュをこのようなラベルに変換するには、16進数の入力として貼り付け、「パディング」をオフにして「小文字」を選択します。このツールが行うのはエンコードの手順だけで、ソルト付きで反復計算される NSEC3 ハッシュ自体は計算しません。
コードで Base32hex を扱う
# Python 3.10 以降
import base64
base64.b32hexencode(b'foobar') # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'
// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)
仕様
| 使用文字 | 0-9 A-V |
|---|---|
| 出力サイズ | 5 バイトごとに 8 文字(160%) |
| パディング | = で 8 文字の倍数に揃える |
| 規格 | RFC 4648 第 7 節 |
| 大文字と小文字の区別 | なし |
エンコード例
| 入力 (UTF-8) | 出力 |
|---|---|
Hello, World! | 91IMOR3F5GG5ERRIDHI22=== |
Base64.is | 89GN6P9M6GN6ISO= |
你好 | SIUQ1PD5NK====== |
よくある質問
Base32 と Base32hex の違いは何ですか?
A-Z 2-7 を使い、Base32hex はデータの並び順を保つ 0-9 A-V を使います。両者に互換性はありません。Base32hex は大文字と小文字を区別しますか?
アルファベットは大文字で定義されていますが、このデコーダーは小文字の入力も受け付けます。DNS ラベルなど、小文字で出力したい場合は「小文字」をオンにしてください。
パディングは使うべきですか?
= で 8 文字の倍数になるようパディングしますが、NSEC3 をはじめ、多くの形式では省略されます。デコーダーはどちらも受け付けるので、受信側のシステムが想定する形式を選んでください。