使い方
- Base58 文字列を入力欄に貼り付けます。スペースと改行は無視されます。
- 出力欄で、デコードされたバイト列を16進数で確認します。
- 16進数をコピーするか、「入力と出力を入れ替え」ボタンを押して16進数を Base58 に戻します。
Base58 を16進数に変換する仕組み
Base58 では、文字列全体を、0、O、I、l を除いた 58 文字の Bitcoin アルファベットで書かれた 1 つの大きな数として読み取ります。16進数への変換では、同じ数を 16進法で 1 バイトにつき 2 桁で書き表すため、何も追加されず、何も失われません。
データ先頭のゼロバイトは数値としての値を持たないため、Base58 ではそれぞれをアルファベットの最初の文字である 1 として先頭に記録します。デコーダーは先頭の 1 をすべて 00 バイトに戻します。たとえば、115Q は 0000ff にデコードされ、1 が 32 個並んだ Solana の System Program のアドレスは 32 個のゼロバイトにデコードされます。変換はブラウザ内でローカルに行われます。
Bitcoin、Solana、IPFS の例
以下の16進数には、各部分がわかるようにスペースを入れています。
Bitcoin アドレス(P2PKH、ジェネシスブロック)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 c29b7d93
バージョン | hash160(20 バイト)| チェックサム(4 バイト)
Solana 公開鍵(SPL Token プログラム)
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9
32 バイト、バージョンバイトなし、チェックサムなし
IPFS CIDv0
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
12 20 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
sha2-256 | 長さ 32 | ダイジェスト
レガシーの Bitcoin アドレスが 1 で始まるのは、バージョンバイトが 00 だからです。P2SH アドレスは 3 で始まり、デコードするとバージョンは 05 になります。
Base58Check のチェックサムはバイト列に残る
Bitcoin アドレスと WIF 形式の秘密鍵は Base58Check を使います。これは、ペイロードに SHA-256 を 2 回適用したハッシュから取った 4 バイトのチェックサムを、エンコード前に末尾に付加する方式です。このページでは通常の Base58 を使うため、チェックサムもほかのデータと同じようにデコードされ、末尾の 8 桁の16進数として表示されます。レガシーアドレスの hash160 は、先頭の 00 とチェックサムの間にある 40 桁の16進数です。
アドレスが壊れていないことを確認し、チェックサムを除いたペイロードを取り出すには、Base58Check のページでデコードしてください。Solana の鍵や IPFS ハッシュにはチェックサムがないため、通常の Base58 を使うのが適切です。
コードで Base58 を16進数に変換する
# Python (pip install base58)
import base58
base58.b58decode('115Q').hex() # '0000ff'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
Buffer.from(bs58.decode('115Q')).toString('hex'); // '0000ff'
よくある質問
Bitcoin アドレスが 20 バイトではなく 25 バイトにデコードされるのはなぜですか?
レガシーアドレスには、1 バイトのバージョン、公開鍵の 20 バイトの hash160、4 バイトのチェックサムが含まれています。通常の Base58 ではこの 3 つがすべて返されるため、50 桁の16進数になります。hash160 は、最初の 1 バイトと最後の 4 バイトを除いた部分です。
先頭の 1 がすべて 00 になるのはなぜですか?
Base58 では、文字 1 は値ゼロを表します。データを単なる数値として扱うと先頭のゼロバイトは消えてしまうため、それぞれを 1 として書き、デコード時に 00 バイトに戻します。
無効な文字のエラーが出るのはなぜですか?
Solana の公開鍵の長さはどれくらいですか?
ちょうど 32 バイト、16進数で 64 桁です。Base58 では通常 43 文字または 44 文字になります。System Program のアドレスのように、ゼロバイトで始まる鍵はこれより短くなることがあります。