Crockford Base32 エンコーダー・デコーダー

テキスト、16進数のバイト列、ファイルを Douglas Crockford の Base32 に変換し、元に戻します。デコーダーは入力ミスに寛容で、大文字・小文字とハイフンを無視し、O を 0、I や L を 1 として読み取ります。

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

使い方

  1. テキストを Crockford Base32 にするには「エンコード」を、テキストに戻すには「デコード」を選択します。
  2. 「種類」は Crockford のままにし、「パディング」がオフになっていることを確認します。小文字で出力するには「小文字」をオンにします。
  3. テキストを入力または貼り付けるか、ファイルを開きます。デコード時、ハイフンとスペースは無視されます。
  4. 結果をコピーするか、ファイルとしてダウンロードします。

Crockford Base32 とは

Douglas Crockford は、人が読んだり入力したり読み上げたりする識別子のために、この Base32 アルファベットを設計しました。使うのは 10 個の数字と 22 個の大文字、0123456789ABCDEFGHJKMNPQRSTVWXYZ です。文字の I と L は数字の 1 に、O は 0 に似ているため除外されています。U は、偶然に卑わいな英単語ができてしまう可能性を減らすために除外されています。

各記号は 5 ビットを表すため、RFC 4648 の Base32 と同じく 5 バイトが 8 文字になります。記号は ASCII の昇順に並んでいるため、パディングがなく大文字・小文字がそろった文字列は、エンコード元のデータと同じ順序でソートされます。Crockford の仕様ではパディングを使わないため、「パディング」オプションはオフのままにしてください。

入力ミスに寛容なデコード

Crockford の仕様は、人が実際に入力するものを受け付けるようデコーダーに求めており、このツールもそれに従います。

  • 大文字と小文字は同じものとして扱われます。
  • 文字の O は数字の 0 として、文字の I と L は 1 として読み取られます。
  • 長いコードを読みやすくするために挿入されるハイフンは無視され、スペースや改行も同様に無視されます。

文字の U は無効で、その位置とともにエラーとして表示されます。

バイト列、数値と ULID

Crockford は自身のエンコード方式を数値の観点で説明していますが、このツールは RFC 4648 と同じ方法でバイトの並びを 5 ビットのグループに分け、Crockford の記号でエンコードします。ビット数が 5 の倍数でない場合、数値ベースの実装は余りのゼロビットを先頭に置き、このツールは末尾に置くため、結果が異なることがあります。

よくある例が ULID です。ULID は Crockford のアルファベットを使いますが、128 ビットの値を 1 つの数値として 26 文字にエンコードします。そのため、ULID の 16 バイトをこのツールでエンコードしても同じ文字列にはならず、ULID をデコードすると 2 ビットずれたバイト列が得られます。Crockford の仕様にある任意のチェック記号(値を 37 で割った余りを表す追加の 1 文字)には対応していません。このツールはチェック記号の付加も検証も行いません。

仕様

使用文字0-9 A-Z(I L O U を除く)
出力サイズ5 バイトごとに 8 文字(160%)
パディングなし
規格Crockford Base32(2002 年)
大文字と小文字の区別なし

エンコード例

入力 (UTF-8)出力
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

よくある質問

Crockford Base32 は大文字と小文字を区別しますか?

いいえ。出力はデフォルトで大文字で、「小文字」オプションで小文字に切り替えられます。デコーダーは、1 つの文字列内で混在していても、どちらも受け付けます。

アルファベットに I、L、O、U がないのはなぜですか?

I と L は 1 と、O は 0 と見間違えやすいため除外されており、デコード時はそれぞれの数字として読み取られます。U は、ランダムなコードが不快な英単語にならないよう除外されています。

このツールは Crockford のチェック記号に対応していますか?
いいえ。仕様では、37 を法とするチェックサムを表す任意の追加文字が認められており、追加の記号 * ~ $ = U を使います。このツールはこれを付加も検証もしないため、デコードする前にチェック記号を取り除いてください。
ここで ULID をデコードできますか?

正確な 16 バイトにはデコードできません。ULID は 128 ビットを余りのビットを先頭に置いた 1 つの数値としてエンコードしますが、このツールはバイトのグループ単位で処理し、余りのビットを末尾に置きます。タイムスタンプやランダム部分を読み取るには、ULID のライブラリを使用してください。