使い方
- Base58Check 文字列を作成するには「エンコード」を、文字列を検証して元のバイト列を取り出すには「デコード」を選択します。
- エンコードする場合は、「入力形式」を「16進数」にして、バージョンバイトに続けてペイロードを入力します(例:00 と 20 バイトの HASH160)。
- 「Base58Check チェックサム」はオンのままにします。エンコード時にはチェックサムが付加され、デコード時には検証されます。
- デコードする場合は、文字列を貼り付けて「出力形式」を「16進数」にします。チェックサムを除いたバージョンバイトとペイロードが得られます。
Base58Check の仕組み
- データの種類を示すバージョンバイトを先頭に置き、その後に 20 バイトの公開鍵ハッシュなどのペイロードを続けます。
- このバイト列を SHA-256 でハッシュし、その結果をもう一度 SHA-256 でハッシュして、先頭の 4 バイトをチェックサムとします。
- チェックサムを末尾に付加し、全体を Base58 でエンコードします。先頭の
0x00バイトは、それぞれ1になります。
このツールは、入力されたバイト列そのものに対してチェックサムを計算します。バージョンバイトは自動では付加されないため、入力の先頭に含めてください。デコード時には、最後の 4 バイトを除いた全体についてチェックサムを再計算します。一致すればバージョンバイトとペイロードが得られ、一致しなければチェックサムのエラーになります。ランダムな入力ミスが見逃されるのは、約 40 億回に 1 回にすぎません。
主なバージョンバイト
| バージョンバイト | データ | エンコード後の先頭文字 |
|---|---|---|
0x00 | Bitcoin P2PKH アドレス(20 バイトの HASH160) | 1 |
0x05 | Bitcoin P2SH アドレス(20 バイトのスクリプトハッシュ) | 3 |
0x6F | Bitcoin テストネットの P2PKH アドレス | m または n |
0x80 | WIF 形式の秘密鍵(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.is | 6XgW4KVJr8DBmZEAeJ |
你好 | DrMzxHL43oWHbW |
よくある質問
デコード時にチェックサムのエラーになるのはなぜですか?
バージョンバイトは自動で付加されますか?
00 です。WIF 形式の秘密鍵をデコードできますか?
80、32 バイトの鍵、そして圧縮鍵の場合は末尾の 01 が得られます。デコードはブラウザ内でローカルに実行されますが、実際の秘密鍵は慎重に扱ってください。bc1 アドレスはデコードできますか?
いいえ。ネイティブ SegWit と Taproot のアドレスは、独自のチェックサムを持つ別のエンコード方式である Bech32 または Bech32m を使います。Bitcoin で Base58Check が使われるのは、1 または 3 で始まるレガシーアドレス(テストネットでは m、n、2)だけです。