Base58Check エンコーダー・デコーダー

4 バイトのダブル SHA-256 チェックサムを付加して Base58 にエンコードします。Base58Check 文字列をデコードしてチェックサムを検証し、バージョンバイトとペイロードを確認することもできます。

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

使い方

  1. Base58Check 文字列を作成するには「エンコード」を、文字列を検証して元のバイト列を取り出すには「デコード」を選択します。
  2. エンコードする場合は、「入力形式」を「16進数」にして、バージョンバイトに続けてペイロードを入力します(例:00 と 20 バイトの HASH160)。
  3. 「Base58Check チェックサム」はオンのままにします。エンコード時にはチェックサムが付加され、デコード時には検証されます。
  4. デコードする場合は、文字列を貼り付けて「出力形式」を「16進数」にします。チェックサムを除いたバージョンバイトとペイロードが得られます。

Base58Check の仕組み

  1. データの種類を示すバージョンバイトを先頭に置き、その後に 20 バイトの公開鍵ハッシュなどのペイロードを続けます。
  2. このバイト列を SHA-256 でハッシュし、その結果をもう一度 SHA-256 でハッシュして、先頭の 4 バイトをチェックサムとします。
  3. チェックサムを末尾に付加し、全体を Base58 でエンコードします。先頭の 0x00 バイトは、それぞれ 1 になります。

このツールは、入力されたバイト列そのものに対してチェックサムを計算します。バージョンバイトは自動では付加されないため、入力の先頭に含めてください。デコード時には、最後の 4 バイトを除いた全体についてチェックサムを再計算します。一致すればバージョンバイトとペイロードが得られ、一致しなければチェックサムのエラーになります。ランダムな入力ミスが見逃されるのは、約 40 億回に 1 回にすぎません。

主なバージョンバイト

バージョンバイトデータエンコード後の先頭文字
0x00Bitcoin P2PKH アドレス(20 バイトの HASH160)1
0x05Bitcoin P2SH アドレス(20 バイトのスクリプトハッシュ)3
0x6FBitcoin テストネットの P2PKH アドレスm または n
0x80WIF 形式の秘密鍵(32 バイト。圧縮鍵の場合はさらに 0x01)5(圧縮鍵の場合は K / L)

bc1 で始まる SegWit や Taproot のアドレスは、Base58Check ではなく Bech32 を使うため、ここではデコードできません。XRP Ledger のアドレスは、同じチェックサムを Ripple アルファベットで使います。「アルファベット」で Ripple を選択してください。

例:HASH160 からアドレスへ

Bitcoin のジェネシスブロックに関連付けられたよく知られたアドレスは、バージョンバイト 00 に 20 バイトの HASH160 を続けたものです。「入力形式」を「16進数」にし、「Base58Check チェックサム」をオンにして入力すると、おなじみのアドレスが得られます。

Input (Hex)  00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Output       1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

コードでは、Python の base58 パッケージに b58encode_check() と b58decode_check() があり、npm パッケージの bs58check には encode() と decode() があります。

仕様

使用文字1-9 A-Z a-z(0 O I l を除く)
出力サイズ約 137% と 4 バイトのチェックサム
パディングなし
規格Bitcoin Base58Check
大文字と小文字の区別あり

エンコード例

入力 (UTF-8)出力
Hello, World!gTazoqFvnegwaKM8v1B33sR
Base64.is6XgW4KVJr8DBmZEAeJ
你好DrMzxHL43oWHbW

よくある質問

デコード時にチェックサムのエラーになるのはなぜですか?
文字の入力ミスがあるか、選択しているアルファベットが違うか、文字列がチェックサムのない通常の Base58 であることが考えられます。Solana のアドレスや IPFS の CID などの通常の Base58 文字列は、Base58 のページでデコードしてください。
バージョンバイトは自動で付加されますか?
いいえ。チェックサムは入力されたバイト列に対して計算されるため、バージョンバイトを入力に含める必要があります。「入力形式」を「16進数」に切り替え、最初にバージョンバイトを入力してください。たとえば、Bitcoin アドレスなら 00 です。
WIF 形式の秘密鍵をデコードできますか?
はい。「デコード」タブに貼り付け、「出力形式」で「16進数」を選択してください。80、32 バイトの鍵、そして圧縮鍵の場合は末尾の 01 が得られます。デコードはブラウザ内でローカルに実行されますが、実際の秘密鍵は慎重に扱ってください。
bc1 アドレスはデコードできますか?

いいえ。ネイティブ SegWit と Taproot のアドレスは、独自のチェックサムを持つ別のエンコード方式である Bech32 または Bech32m を使います。Bitcoin で Base58Check が使われるのは、1 または 3 で始まるレガシーアドレス(テストネットでは m、n、2)だけです。