使い方
- 16進数のバイト列を入力欄に貼り付けます。スペース、コロン、0x プレフィックスも使用できます。
- 出力欄で Base58 の結果を確認します。
- 結果をコピーするか、「入力と出力を入れ替え」ボタンを押して Base58 を16進数にデコードします。
16進数を Base58 に変換する仕組み
16進数はまず 2 桁ずつバイトに変換されるため、入力の桁数は偶数である必要があります。次に、そのバイト列をビッグエンディアンの 1 つの数として読み取り、Bitcoin アルファベットを使って 58進法で書き直します。先頭の 00 バイトはそれぞれ 1 として書かれます。そのため、0000ff は 115Q になり、ff だけなら 5Q になります。
Base58 は 1 バイトあたり約 1.37 文字を必要とするため、64 桁の16進数(32 バイト)は 43 文字または 44 文字に縮まります。アルファベットには 0、O、I、l、+、/ が含まれないため、結果は読み上げやすく、ダブルクリックで選択でき、URL にもそのまま入れられます。計算はすべてブラウザ内で行われます。
Solana と IPFS の識別子を作成する
- Solana:アドレスは 32 バイトの Ed25519 公開鍵を Base58 で表したもので、プレフィックスもチェックサムもありません。64 桁の16進数の鍵を貼り付けると、アドレスが得られます。
- IPFS CIDv0:CIDv0 は sha2-256 マルチハッシュを Base58 で表したものです。64 桁のダイジェストの前に
1220を付けると、Qmで始まる 46 文字の文字列になります。ダイジェストは IPFS がエンコード済みのブロックに対して計算したものでなければならず、元のファイルの SHA-256 とは異なります。
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
Bitcoin アドレスにはチェックサムが必要
hash160 だけではアドレスになりません。レガシーの Bitcoin アドレスは、バージョンバイト 00 に 20 バイトの hash160 を続けたものを Base58Check でエンコードしたもので、エンコード前に SHA-256 を 2 回適用した 4 バイトのチェックサムが付加されます。00 と hash160 を通常の Base58 でエンコードすると、チェックサムのない短い文字列になり、ウォレットでは受け付けられません。
代わりに Base58Check のページを使ってください。「入力形式」を「16進数」に切り替え、00 に続けて hash160 を入力すると、チェックサムが自動的に付加されます。16進数の末尾にすでに正しいチェックサムが付いている場合は、このページでも同じアドレスが得られます。
0062e907b15cbf27d5425399ebf6f0fb50ebb88f18 (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
コードで16進数を Base58 に変換する
# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff')) # b'115Q'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(Buffer.from('0000ff', 'hex')); // '115Q'
よくある質問
hash160 を Bitcoin アドレスに変換するにはどうすればよいですか?
結果がいくつかの 1 で始まるのはなぜですか?
入力した16進数が、同じ数の 00 バイトで始まっているためです。Base58 は、文字列をデコードしたときに復元できるよう、それらを先頭の 1 として保持します。
16進数の入力がエラーになるのはなぜですか?
16進数は桁数が偶数で、0-9 と a-f の文字(大文字・小文字は問いません)だけで構成されている必要があります。スペース、コロン、0x プレフィックスは自動的に取り除かれますが、紛れ込んだ g などの文字や桁の不足はエラーになります。