Base32hex エンコーダー・デコーダー

テキスト、16進数のバイト列、ファイルを拡張16進アルファベットの Base32 に変換し、元に戻します。パディングや大文字・小文字を指定して、NSEC3 形式のラベルなども作成できます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. テキストを Base32hex にするには「エンコード」を、Base32hex をテキストに戻すには「デコード」を選択します。
  2. 「種類」は Base32hex のままにします。形式に応じて「パディング」をオフにしたり、「小文字」に切り替えたりします。
  3. テキストを入力または貼り付けるか、ファイルを開きます。結果は入力に合わせてリアルタイムに更新されます。
  4. 結果をコピーするか、ファイルとしてダウンロードします。

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.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

よくある質問

Base32 と Base32hex の違いは何ですか?
どちらも 1 文字あたり 5 ビットで、パディングの規則も同じです。標準の Base32 は A-Z 2-7 を使い、Base32hex はデータの並び順を保つ 0-9 A-V を使います。両者に互換性はありません。
Base32hex は大文字と小文字を区別しますか?

アルファベットは大文字で定義されていますが、このデコーダーは小文字の入力も受け付けます。DNS ラベルなど、小文字で出力したい場合は「小文字」をオンにしてください。

パディングは使うべきですか?
RFC 4648 では = で 8 文字の倍数になるようパディングしますが、NSEC3 をはじめ、多くの形式では省略されます。デコーダーはどちらも受け付けるので、受信側のシステムが想定する形式を選んでください。
Base32hex の文字列は16進数と同じですか?
いいえ。0-9 と A-F だけを含む Base32hex の文字列は16進数のように見えますが、1 文字が表すのは 4 ビットではなく 5 ビットです。通常の16進数を扱うには、Base16 ツールを使用してください。