Base32・Base58・Ascii85 変換ツール
テキストまたは生のバイトを、Base32、Base58、Ascii85、Z85 のいずれかでエンコードし、または逆にデコードできます。各方式には、それぞれ固有のアルファベットと詰め物(パディング)の規則があります。計算表は、最初のバイトがどのように文字に変わるかを示します。Base64 は「テキストエンコーダー・デコーダー」で扱えます。ブラウザ内で動作し、アップロードは行われません。
A〜Z と 2〜7 の文字を使い、1文字あたり5ビットで、8文字の倍数になるように = で詰め物をします。デコードでは大文字・小文字は区別されません。
計算の仕組み
バイトは、ビットの並びとして5ビットずつのグループに分けられます。各グループは0〜31の数で、1つの文字を選びます。
| ビット | 値 | 文字 |
|---|---|---|
| 01001 | 9 | J |
| 00001 | 1 | B |
| 10010 | 18 | S |
| 10110 | 22 | W |
| 11000 | 24 | Y |
| 11011 | 27 | 3 |
| 00011 | 3 | D |
| 01111 | 15 | P |
| 00101 | 5 | F |
| 10000 | 16 | Q |
| 10000 | 16 | Q |
| 00101 | 5 | F |
| 01110 | 14 | O |
| 11011 | 27 | 3 |
| 11011 | 27 | 3 |
| 10010 | 18 | S |
最初の 16 行を表示しています。
Base32・Base58・Ascii85 変換ツールの使い方
- 1. エンコード方式を選びます。 Base32、拡張16進アルファベットの Base32、ビットコインのアルファベットの Base58、Adobe の Ascii85、または Z85 です。メニューの下の注記に、選んだ方式の説明が表示されます。
- 2. データの種類を指定します。 テキスト は UTF-8 のバイトとして読まれます。16進数のバイト では、
86 4f d2 6fのような2桁の組で、鍵などの任意のバイナリを入力できます。 - 3. エンコードかデコードかを選びます。 エンコードでは、その方式のアルファベットだけでできたテキストになります。デコードでは、バイトに戻り、テキストか16進数で表示されます。入力中の空白や改行は無視されます。
- 4. オプションを確認します。 Base32 は
=の詰め物を付けるか省くか選べます。Ascii85 は<~と~>で囲むことができ、4個のゼロのバイトをzと書くこともできます。
これらの符号化の用途
どれも暗号化ではありません。印字できないかもしれないバイトを、メール、URL、QR コード、設定ファイルに貼り付けられるテキストに変換するもので、その方式の名前が分かれば誰でも元に戻せます。違いは、使うアルファベットと、データに対してテキストがどれだけ長くなるかです。
| 方式 | 文字数 | バイト数に対する長さ | Hello, World は |
|---|---|---|---|
| Base32(RFC 4648) | 32 | 8 ÷ 5 倍の長さ | JBSWY3DPFQQFO33SNRSA==== |
| Base32 拡張16進 | 32 | 8 ÷ 5 倍の長さ | 91IMOR3F5GG5ERRIDHI0==== |
| Base58(ビットコイン) | 58 | 約 1.37 倍 | 2NEpo7TZsLBYdvo5V |
| Ascii85(Adobe) | 85 | 5 ÷ 4 倍の長さ | <~87cURD_*#4DfTZ)~> |
| Z85(ZeroMQ) | 85 | 5 ÷ 4 倍の長さ | nm=QNz.92jz/PV8 |
Base32
Base32 は、バイトを5ビットずつのグループに分け、それぞれを A〜Z と 2〜7 の32文字のどれかで書きます。0、1、8 は O、I、B に似ているため除外され、大文字・小文字は区別されないので、読み上げたり入力したりしやすくなっています。詰め物の記号 = は、長さを8の倍数に切り上げます。RFC 4648 には、foobar → MZXW6YTBOI====== のようなテストベクターがあります。認証アプリの秘密鍵や Tor のオニオンアドレスも Base32 です。
Base58
Base58 は入力全体を1つの大きな数として扱い、それを58進数で書きます。0、O、I、l と記号の + および / は除外されるので、結果はダブルクリックでコピーでき、読み間違えにくくなっています。先頭のゼロのバイトは、それぞれ最初の文字 1 になります。ビットコインのアルファベットは Base58 の数種類のうちの1つにすぎず、Ripple や Flickr が使うものは文字の順序が異なるため、データがどれを使っているか確認してください。ビットコインのアドレスは、さらにチェックサムとバージョンのバイトを加えます。この方式は Base58Check と呼ばれ、このツールは計算しません。
Ascii85 と Z85
どちらも、4バイトを32ビットの数として読み、それを85進数の5桁で書きます。そのため、データより25%だけ長くなるだけです。PostScript と PDF で使われる Adobe の Ascii85 は、! から u までの文字を使い、4個のゼロのバイトを z と略し、通常はデータを <~ と ~> で囲みます。最後の1〜3バイトのグループは、バイト数より1文字多くなります。ZeroMQ の RFC 32 で定義された Z85 は、ソースコードで引用符や円記号を避けるために選ばれた、別の85文字のアルファベットを使います。z の略記も、短い最後のグループもないので、入力は4バイトの倍数でなければなりません。仕様の例は、8バイト 86 4f d2 6f b5 59 f7 5b で、これは HelloWorld にエンコードされます。Git が使う RFC 1924 のものなど、別の85進アルファベットもあるので、アルファベットは出典に合わせてください。
よくある質問
- Base32 や Base58 は暗号化ですか?
- いいえ。これらは符号化です。アルファベットと規則が公開されているので、誰でも元に戻せます。データを印字可能にし、コピーしやすくするためのもので、秘密にするためのものではありません。
- Base58 はなぜ一部の文字を除外しているのですか?
- 紛らわしい文字と記号を避けるためです。ほとんどのフォントで見間違えやすい 0(ゼロ)、O(大文字のオー)、I(大文字のアイ)、l(小文字のエル)を除き、ダブルクリックでの選択を壊す + と / も除外しています。その結果、58文字が残ります。
- Base32 の文字列はどうデコードしますか?
- Base32 を選び、「デコード」に切り替えて文字列を貼り付けます。大文字・小文字は区別されず、末尾の = は省略できます。文字に関するエラーが出る場合、その文字列は拡張16進の Base32、Base64、ほかの符号化の可能性があります。
- Ascii85 と Z85 の違いは何ですか?
- どちらも4バイトを5文字で表しますが、アルファベットが違います。Ascii85 は ! から u までの文字を使い、ゼロ用の z の略記があり、<~ と ~> で囲まれることもあります。Z85 はソースコードで安全なアルファベットを使い、略記はありません。
- Z85 で4バイトの倍数が必要と言われるのはなぜですか?
- Z85 の仕様では詰め物が定義されていません。データは4バイトの完全なグループ単位で、テキストは5文字の倍数でなければなりません。自分でバイトを追加するか、短い最後のグループを扱える Ascii85 を使ってください。
- Base64 の文字列はどうエンコードしますか?
- このページでは Base64 は扱いません。テキストエンコーダー・デコーダーで、テキストを Base64、URL、HTML エンティティに変換したり、戻したりできます。XOR暗号のページでは、16進数のバイトを Base64 として表示できます。