Base58Check 編碼解碼

追加 4 位元組雙重 SHA-256 校驗和並編碼為 Base58,或者解碼 Base58Check 字串、校驗其校驗和,並檢視版本位元組和有效載荷。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 選擇「編碼」生成 Base58Check 字串,或選擇「解碼」校驗字串並還原位元組。
  2. 編碼時把輸入切換為「十六進位」,先輸入版本位元組,再輸入有效載荷,例如 00 加上 20 位元組的 HASH160。
  3. 保持 Base58Check 選項開啟。編碼時會自動追加校驗和,解碼時會自動校驗。
  4. 解碼時貼上字串並把輸出設為「十六進位」,得到的是去掉校驗和後的版本位元組和有效載荷。

Base58Check 的工作原理

  1. 先寫一個表示資料型別的版本位元組,後面接有效載荷,例如 20 位元組的公鑰雜湊。
  2. 對這些位元組做一次 SHA-256,再對結果做一次 SHA-256,取前 4 個位元組作為校驗和。
  3. 把校驗和追加到末尾,然後整體用 Base58 編碼。每個前導 0x00 位元組都會變成 1。

本工具只對你輸入的位元組計算校驗和,不會自動新增版本位元組,所以請把版本位元組放在輸入的開頭。解碼時,工具會對除最後 4 個位元組以外的部分重新計算校驗和:一致則返回版本位元組和有效載荷,不一致則提示校驗和錯誤。隨機輸錯一個字元而恰好通過校驗的機率大約只有四十億分之一。

常見版本位元組

版本位元組資料編碼結果開頭
0x00比特幣 P2PKH 地址(20 位元組 HASH160)1
0x05比特幣 P2SH 地址(20 位元組指令碼雜湊)3
0x6F比特幣測試網 P2PKH 地址m 或 n
0x80WIF 私鑰(32 位元組,壓縮公鑰對應的私鑰再加 0x01)5,壓縮格式為 K 或 L

以 bc1 開頭的 SegWit 和 Taproot 地址使用 Bech32 編碼,而不是 Base58Check,無法在這裡解碼。XRP Ledger 地址使用相同的校驗方式,但字母表不同,請在「字母表」選項中選擇 Ripple。

範例:從 HASH160 到地址

與比特幣創世區塊相關的那個知名地址,由版本位元組 00 和一個 20 位元組的 HASH160 組成。以十六進位輸入並開啟 Base58Check,就能得到這個熟悉的地址:

輸入(十六進位)  00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
輸出              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.is6XgW4KVJr8DBmZEAeJ
你好DrMzxHL43oWHbW

常見問題

為什麼解碼時提示校驗和錯誤?
可能是輸錯了字元、選錯了字母表,或者該字串只是不帶校驗和的普通 Base58。Solana 地址、IPFS CID 等普通 Base58 字串請在 Base58 頁面解碼。
工具會自動新增版本位元組嗎?
不會。校驗和是對你輸入的位元組計算的,因此版本位元組必須包含在輸入中。把輸入切換為「十六進位」,先輸入版本位元組,例如比特幣地址用 00。
可以解碼 WIF 私鑰嗎?
可以。在「解碼」中貼上私鑰並選擇十六進位輸出,會得到 80、32 位元組私鑰,壓縮格式的私鑰末尾還有一個 01。解碼完全在瀏覽器本地進行,但處理真實私鑰時仍需謹慎。
可以解碼 bc1 開頭的地址嗎?

不可以。原生 SegWit 和 Taproot 地址使用 Bech32 或 Bech32m,這是另一種帶獨立校驗和的編碼。在比特幣中,Base58Check 只用於以 1 或 3 開頭的傳統地址(測試網為 m、n 或 2)。