十六進位轉 Base58

貼上十六進位位元組,即可得到比特幣、Solana 和 IPFS 使用的 Base58 字串。開頭的每個 00 位元組都會變成一個 1,其餘位元組原樣保留。

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

使用方法

  1. 把十六進位位元組貼上到輸入框中,可以包含空格、冒號或 0x 字首。
  2. 在輸出中檢視 Base58 結果。
  3. 複製結果,或點選「交換」把 Base58 解碼回十六進位。

十六進位如何轉換成 Base58

十六進位數字先按每兩位一個位元組轉換成位元組,所以輸入的位數必須是偶數。隨後,這些位元組被當作一個大端序的大數,用比特幣字母表改寫成 58 進位。開頭的每個 00 位元組都寫成一個 1,所以 0000ff 會變成 115Q,而單獨的 ff 是 5Q。

Base58 每個位元組約需 1.37 個字元,64 位十六進位數字(32 位元組)會縮短到 43 或 44 個字元。它的字母表中沒有 0、O、I、l、+ 和 /,結果便於朗讀,雙擊即可整段選中,也能直接放進 URL。所有計算都在瀏覽器中完成。

生成 Solana 和 IPFS 識別符號

  • Solana:地址就是 32 位元組 Ed25519 公鑰的 Base58 形式,沒有字首,也沒有校驗和。貼上 64 位十六進位公鑰即可得到地址。
  • IPFS CIDv0:CIDv0 是 sha2-256 多重雜湊的 Base58 形式。在 64 位摘要前面加上 1220,就會得到一個以 Qm 開頭、長 46 個字元的字串。注意,這裡的摘要必須是 IPFS 對編碼後資料塊計算的雜湊,與原始檔案的 SHA-256 並不相同。
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

比特幣地址需要校驗和

單獨的 hash160 並不是地址。傳統比特幣地址是對「版本位元組 00 + 20 位元組 hash160」做 Base58Check 編碼的結果,編碼前會追加 4 位元組的雙重 SHA-256 校驗和。如果直接用普通 Base58 編碼 00 和 hash160,得到的字串更短、沒有校驗和,錢包會拒絕它。

請改用 Base58Check 頁面:把輸入切換為十六進位,輸入 00 加 hash160,校驗和會自動新增。如果你的十六進位末尾已經帶有正確的校驗和,本頁會得到同樣的地址。

0062e907b15cbf27d5425399ebf6f0fb50ebb88f18    (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

在程式碼中把十六進位轉成 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 轉換成比特幣地址?
在前面加上版本位元組 00,然後用 Base58Check 編碼,而不是普通 Base58。在 Base58Check 頁面以十六進位輸入位元組即可完成。
為什麼結果開頭有好幾個 1?

因為你的十六進位開頭有同樣數量的 00 位元組。Base58 把它們保留為前導的 1,解碼時就能原樣還原。

為什麼我的十六進位輸入報錯?

十六進位必須是偶數位,並且只能包含 0-9 和 a-f(大小寫均可)。空格、冒號和 0x 字首會被自動去掉;其他字元,例如誤輸入的字母 g,或者少了一位數字,都會報錯。

本頁使用哪套 Base58 字母表?
比特幣字母表,Solana、IPFS 和大多數專案用的也是它。如果需要 Flickr 或 Ripple 字母表,請到 Base58 頁面選擇對應字母表,並以十六進位位元組作為輸入。