Base58Checkエンコーダー
21バイトのBitcoinアドレス用データは、4バイトの二重SHA-256チェックサムを含む33文字の16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvMになります。写し間違えた文字は誤ったバイトにならず、検証で弾かれます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 計算モード
- Encode
- 出力形式
- Hex
- 結果
- 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
- Base58Check 形式
- 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
- チェックサム (16進)
- d61967f6
- アルファベット名
- bitcoin
通常のBase58と異なり、1文字の取り違えはほぼ必ずチェックサム検証で失敗し、誤ったバイトへ静かに復号されることはありません。ウォレットアドレス、WIF秘密鍵、手でコピーする文字列ではこれが重要です。開発者はフィクスチャ作成に、教員は完全性確認の演示に、スクリプトは完全なBitcoinライブラリなしで決定的な往復に使います。
Base58の上にBase58Checkが足すもの
使うのは0・大文字O・大文字I・小文字Lを除いたBitcoinアルファベットです。この符号化は人間には読みやすい一方、完全性は守られません。1文字の打ち間違いは別の有効文字列となり、別のバイト列に復号されます。
Base58Checkはその隙を埋めます。4バイトのチェックサムにより、1文字の誤りの見逃しは実務上およそ四十億分の一程度となり、だからこそBitcoinのP2PKHアドレスや多くの拡張鍵、関連ツールがこの構成を標準にしています。
本ランディングはBase58Checkエンコーダー、Base58Checkデコーダー、Bitcoinチェックサム変換をオンラインで探す方向けです。チェックサムなしの素のBase58でも、Base64でも、各ネットワークのバージョンバイトを解釈する完全なアドレスタイプ分類器でもありません。
活用例
運用ツール向けのコピー貼り付け完全性
バージョン付きバイナリラベルを符号化し、誤字で閉じた失敗になる文字列をスタッフが貼れるようにし、誤バイトへ静かに復号されないようにします。
よくある質問
Base58とBase58Checkの違いは何ですか?
Base58はバイトをBitcoinアルファベットへ写像するだけです。
このBase58Checkツールはどのアルファベットを使いますか?
Bitcoinアルファベット123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzです。0、O、I、lは除外されます。
デコード時にチェックサムが合わないとどうなりますか?
データから二重SHA-256のチェックサムを計算し直し、文字列に含まれる4バイトと比べます。一致しない場合は、誤っている可能性が高いバイトを返さず、分かりやすいメッセージで止まります。
データは16進数とテキストのどちらで入力しますか?
初期設定は16進数で、桁数は偶数である必要があります。このページの21バイトの例がその形です。普通のUTF-8の文字を守りたいときはテキストを選びます。デコードでも同じ選択で、復元したデータの表示方法が決まります。
打ち間違いが見逃される確率はどれくらいですか?
ごくわずかです。4バイトのチェックサムにより、1文字の打ち間違いが見逃される確率はおよそ四十億分の一です。そのため、1文字変わっただけでも、ほぼ確実に検証で弾かれます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/base58-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"00010966776006953D5567439E5E39F86A0D273BEE"}'const res = await fetch("https://api.kit.forhosting.com/enc/base58-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "00010966776006953D5567439E5E39F86A0D273BEE"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/base58-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "00010966776006953D5567439E5E39F86A0D273BEE"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/base58-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"00010966776006953D5567439E5E39F86A0D273BEE"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"00010966776006953D5567439E5E39F86A0D273BEE"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/base58-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "00010966776006953D5567439E5E39F86A0D273BEE"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.base58_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
Base58Checkは、ペイロードに二重SHA-256から得た4バイトのチェックサムを付け、全体をBitcoin Base58アルファベットで符号化する、Bitcoinのバイナリ対テキスト形式です。本Base58CheckエンコーダーはhexまたはUTF-8のペイロードを受け取りBase58Check文字列を返します。デコーダーは写像を逆にたどり、SHA256(SHA256(payload))を再計算し、保存済みチェックサムが一致しないときは明確なinvalid_inputエラーを報告します。経路は純粋な決定的算術であり、ネットワークも乱数シードも時計にも依存しないため、無料ブラウザ実行と前払いAPIは常に同じJSONを返します。
Base58の上にBase58Checkが足すもの
通常のBase58は、ペイロードをビッグエンディアン整数として扱い58で繰り返し割ることで、バイト列を曖昧でない58文字へ写像します。符号化の前にエンコーダーはペイロードのSHA-256を計算し、そのダイジェストのSHA-256をさらに計算し、外側ハッシュの先頭4バイトをチェックサムとして付けます。元のペイロードとこの4バイトを合わせたバッファを、先頭ゼロを先頭1に写す規約も含め、生のBase58と同じ手順で符号化します。復号では逆順です。 Base58復号でバイト列を得て、末尾4バイトを主張されたチェックサムとし、残りのペイロードの二重SHA-256がそれに一致しなければ失敗します。
APIの呼び出し方と応答の内容
formatがhexのencodeでは、textはチェックサムを含まない偶数長の十六進文字列でなければなりません。例はバージョンバイト00で始まる古典的な21バイトのフィクスチャです。formatがutf8のときは、チェックサム前にtextをUTF-8バイトへ符号化します。必須の文字列フィールドtext(別名input、value、data、payload)、任意のmode(encodeまたはdecode、既定はencode)、任意のformat(hexまたはutf8、既定はhex)を含むJSON本体を送ってください。hex内の空白は除去され、奇数長や非hex桁はinvalid_inputを返します。decodeモードではtextをBitcoinアルファベットのBase58Check文字列として扱い、二重SHA-256チェックサムを検証し、formatがhexなら小文字hexのペイロードを、utf8ならUTF-8文字列を返します(有効なUTF-8でないバイナリはhexを使ってください)。encode成功時の応答にはmode、format、input、同じ符号化文字列のresultとbase58check、payload_hex、checksum_hex、alphabet定数とalphabet_name bitcoin、payload_bytes、output_length、短い英語メッセージが含まれます。decode成功時はchecksum_validがtrue、input_length、検証確認メッセージも付きます。text欠落、不正hex、未知のmodeやformat、無効なBase58文字、チェックサムを載せられない短いペイロード、チェックサム不一致などの検証失敗はinvalid_inputを返し、課金されません。料金は成功したリクエストごとに定額$0.002、単位はitemです。
実務のヒント、古典ベクトル、素のBase58との違い
往復スモークテストは明確です。チェックサムなしのアルファベット変換だけなら兄弟の素Base58を、完全性が要るなら本Base58Check能力を使ってください。バージョン接頭辞付きハッシュなどhexのバイナリペイロードを持ち、完全性付きで貼り付けやすい文字列が必要なときはencodeを選んでください。すでにBase58Checkのアドレス風文字列があり、チェックサムが健全なときだけペイロードを取り戻す必要があるときはdecodeを選んでください。既知のhexペイロード00010966776006953D5567439E5E39F86A0D273BEEを符号化し結果16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvMを確認し、その文字列を復号してpayload_hexとchecksum_hex d61967f6を確認します。有効文字列の末尾1文字を意図的に変え、クライアントが受信と期待の4バイトチェックサムを名指しするinvalid_inputを扱うことを検証してください。公開されている文字数上限内にリクエストを収め、極端に長いペイロードは大きな整数へ膨らむためオフライン分割が適切です。invalid_inputを返す失敗タスクは前払い残高を消費しないため、悪いチェックサムを試す探索スクリプトも安価です。授業では同じペイロードをチェックサムあり・なしで符号化し、Bitcoin風文字列が長い理由と、1文字の誤りがほぼ常に閉じた失敗になる理由を示してください。
連携の活用例
ウォレットとアドレスのフィクスチャ試験
既知のhexペイロードからCIフィクスチャを作り、Base58Check符号化がgolden文字列と一致することを断言し、改ざんアドレスをチェックサム不一致で拒否します。
二重SHA-256チェックサムの指導
教室で古典的なBitcoinベクトルを符号化し、checksum_hexを確認したうえで1文字を変えてinvalid_inputを示します。
技術的な質問
チェックサムが一致しないとどうなりますか?
decodeは受信と期待の4バイトチェックサムをhexで含むメッセージ付きのinvalid_inputを返します。失敗タスクは課金されません。
ペイロードはhexと平文のどちらにすべきですか?
既定のformatはhex(偶数長の十六進桁)で、Bitcoinツール群と揃えています。真のUTF-8テキストのときだけformatをutf8にしてください。
Base58Checkエンコーダーは無料ですか?
ブラウザツールは無料でローカル実行です。API呼び出しは成功リクエストごとに$0.002のKIT前払い残高を使い、invalid_input失敗は課金されません。