Base58エンコーダー・デコーダー
入力
Base58は、紛らわしい文字を避けるために設計されたバイナリ・テキスト変換方式です。Bitcoinのアルファベットは0 O I lと+ /を使いません。別のシステムでは、同じ58記号を異なる順序に並べます。従来型BitcoinのBase58CheckアドレスやIPFS CIDv0文字列がよく知られた例です。このツールはブラウザー内だけで動作し、UTF-8テキストまたは正確な16進バイト列をBitcoin、Ripple、Flickrの各アルファベットで変換します。選択したアルファベットにない文字はエラーになります。
Base58をエンコード・デコードする方法
-
1
バイトまたはBase58文字列を入力
エンコード方向では16進数または生のテキストを受け付け、デコード方向ではBase58を受け付けます。
-
2
必要ならアルファベットを選ぶ
標準はBitcoinのBase58です。互換性のためRippleとFlickrのバリアントも選べます。
-
3
変換を実行
Base58は5ビットや6ビットのきれいなグループへ分割しません。1つのビッグエンディアン整数として扱い、58で繰り返し割ります。
-
4
結果をコピー
エンコードされた文字列では、先頭のゼロバイトが先頭の`1`文字(Bitcoinアルファベットでゼロを表す字形)として保持されます。
Bitcoin Base58アルファベット
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
含まれていないものに注目してください。0、O、I、lです。アルファベットの最初の文字は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で始まる仕組みです。
関連ツール
Atbash暗号エンコーダー
A-ZをZ-Aに対応させるヘブライ系の換字式暗号、Atbashでテキストをエンコードまたはデコードできます。同じ操作で暗号化と復号ができます。
AES暗号化 / 復号
OpenSSLのAES暗号方式で低リスクのテキストを暗号化・復号します。パスフレーズはSHA-256でハッシュされ、Base64出力はIVと暗号文です。
bcryptジェネレーター
平文パスワードからbcrypt hashを生成します。cost factorは4から14まで調整でき、Laravel、Django、Node、PHPと互換性があります。
Base85エンコーダー・デコーダー
Adobe Ascii85(PostScript/PDF)またはZ85(ZeroMQ)形式でBase85をエンコード・デコードします。バイナリデータではBase64よりコンパクトです。
Base32エンコーダー・デコーダー
RFC 4648アルファベットでBase32文字列をエンコード・デコードします。TOTPシークレット、大文字小文字を区別しないトークン、人が入力する識別子に便利です。
bcrypt Hashジェネレーター
bcrypt hashの生成、または平文パスワードと既存bcrypt hashの照合を行います。生成とverifyを1つのツールで並べて使えます。