Base58エンコーダー・デコーダー

ステップ 1 / 333%

入力


            

Base58は、紛らわしい文字を避けるために設計されたバイナリ・テキスト変換方式です。Bitcoinのアルファベットは0 O I l+ /を使いません。別のシステムでは、同じ58記号を異なる順序に並べます。従来型BitcoinのBase58CheckアドレスやIPFS CIDv0文字列がよく知られた例です。このツールはブラウザー内だけで動作し、UTF-8テキストまたは正確な16進バイト列をBitcoin、Ripple、Flickrの各アルファベットで変換します。選択したアルファベットにない文字はエラーになります。

Base58をエンコード・デコードする方法

  1. 1

    バイトまたはBase58文字列を入力

    エンコード方向では16進数または生のテキストを受け付け、デコード方向ではBase58を受け付けます。

  2. 2

    必要ならアルファベットを選ぶ

    標準はBitcoinのBase58です。互換性のためRippleとFlickrのバリアントも選べます。

  3. 3

    変換を実行

    Base58は5ビットや6ビットのきれいなグループへ分割しません。1つのビッグエンディアン整数として扱い、58で繰り返し割ります。

  4. 4

    結果をコピー

    エンコードされた文字列では、先頭のゼロバイトが先頭の`1`文字(Bitcoinアルファベットでゼロを表す字形)として保持されます。

Bitcoin Base58アルファベット

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

含まれていないものに注目してください。0OIlです。アルファベットの最初の文字は1で、整数0を表します。

実際の仕組み

固定長のビットグループに分けるBase64と違い、Base58はバイト列全体を1つのビッグエンディアン整数Nとして扱い、58進数で表します。

result = []
while N > 0:
    result.prepend(alphabet[N mod 58])
    N = N / 58
for each leading zero byte in input:
    result.prepend(alphabet[0])  # i.e. '1'

そのためBase58エンコードはストリーミングしにくい処理です。文字を出力する前に全体の数値が必要になります。

Base58とBase58Check

従来型P2PKHアドレスの一般的なBase58Checkペイロードは25バイトです。内訳はバージョン1バイト、ハッシュ20バイト、チェックサム4バイトです。チェックサムには、バージョンとハッシュを二重SHA-256にかけた結果の先頭4バイトを使います。このペイロード全体をBase58でエンコードすると、よく知られたアドレス文字列になります。

このツールが変換するのは通常のBase58だけです。アドレスのバージョンとチェックサムを確認する場合は、専用のBase58Checkバリデーターを使用してください。

アルファベットのバリエーション

バリアント 用途 Bitcoinとの違い
Bitcoin BTCアドレス、IPFS CIDv0 基準(ベースライン)
Ripple XRPアドレス 文字の位置を入れ替え
Flickr 短い写真URL 小文字を大文字より先に配置

Base64ではだめなのか

Base64はバイナリとエンコード済みテキストの長さ変化が一定(3バイトごとに4文字)で効率的です。Base58は少し可変のオーバーヘッドがありますが、曖昧な文字がありません。手でアドレスをコピーしたり電話で読み上げたりする必要がある場合に欲しい性質です。

よくある質問

常にそうではありません。人が文字列を扱うならBase58が向いています。機械がやり取りするならBase64が向いています。Base64は1文字あたり6ビット、Base58は約5.86ビットなので、Base64のほうが少しコンパクトです。

Base58は大きな整数をエンコードするため、上位ビットによって長さが1~2文字変わります。典型的なP2PKHアドレスは34文字ですが、33文字もあり得ます。

文字列を生のバイトへデコードできます。任意のバイトを失わず表示するには16進出力を選んでください。バージョンやチェックサムは検証しないため、デコードできても有効なアドレスとは限りません。検証にはBase58Checkバリデーターが必要です。

はい。入力の先頭にある各ゼロバイトは、出力では1文字になります。Bitcoinアドレスが1で始まる仕組みです。

関連ツール