本文へスキップ

Base32・Base58・Ascii85 変換ツール

テキストまたは生のバイトを、Base32、Base58、Ascii85、Z85 のいずれかでエンコードし、または逆にデコードできます。各方式には、それぞれ固有のアルファベットと詰め物(パディング)の規則があります。計算表は、最初のバイトがどのように文字に変わるかを示します。Base64 は「テキストエンコーダー・デコーダー」で扱えます。ブラウザ内で動作し、アップロードは行われません。

モード

A〜Z と 2〜7 の文字を使い、1文字あたり5ビットで、8文字の倍数になるように = で詰め物をします。デコードでは大文字・小文字は区別されません。

計算の仕組み

バイトは、ビットの並びとして5ビットずつのグループに分けられます。各グループは0〜31の数で、1つの文字を選びます。

ビット値文字
010019J
000011B
1001018S
1011022W
1100024Y
11011273
000113D
0111115P
001015F
1000016Q
1000016Q
001015F
0111014O
11011273
11011273
1001018S

最初の 16 行を表示しています。

Base32・Base58・Ascii85 変換ツールの使い方

  1. 1. エンコード方式を選びます。 Base32、拡張16進アルファベットの Base32、ビットコインのアルファベットの Base58、Adobe の Ascii85、または Z85 です。メニューの下の注記に、選んだ方式の説明が表示されます。
  2. 2. データの種類を指定します。 テキスト は UTF-8 のバイトとして読まれます。16進数のバイト では、86 4f d2 6f のような2桁の組で、鍵などの任意のバイナリを入力できます。
  3. 3. エンコードかデコードかを選びます。 エンコードでは、その方式のアルファベットだけでできたテキストになります。デコードでは、バイトに戻り、テキストか16進数で表示されます。入力中の空白や改行は無視されます。
  4. 4. オプションを確認します。 Base32 は = の詰め物を付けるか省くか選べます。Ascii85 は <~ と ~> で囲むことができ、4個のゼロのバイトを z と書くこともできます。

これらの符号化の用途

どれも暗号化ではありません。印字できないかもしれないバイトを、メール、URL、QR コード、設定ファイルに貼り付けられるテキストに変換するもので、その方式の名前が分かれば誰でも元に戻せます。違いは、使うアルファベットと、データに対してテキストがどれだけ長くなるかです。

方式文字数バイト数に対する長さHello, World は
Base32(RFC 4648)328 ÷ 5 倍の長さJBSWY3DPFQQFO33SNRSA====
Base32 拡張16進328 ÷ 5 倍の長さ91IMOR3F5GG5ERRIDHI0====
Base58(ビットコイン)58約 1.37 倍2NEpo7TZsLBYdvo5V
Ascii85(Adobe)855 ÷ 4 倍の長さ<~87cURD_*#4DfTZ)~>
Z85(ZeroMQ)855 ÷ 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 として表示できます。

関連ツール

暗号・符号のその他のツール