Base58 編碼解碼

將文字、十六進位位元組或小檔案轉換為 Base58,也可以反向解碼。可選擇 Bitcoin、Flickr 或 Ripple 字母表,並可新增或校驗 Base58Check 校驗和。

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

使用方法

  1. 選擇「編碼」把文字或位元組轉換為 Base58,或選擇「解碼」把 Base58 字串還原為資料。
  2. 選擇字母表。預設的 Bitcoin 字母表同樣用於 IPFS 和 Solana。
  3. 輸入或貼上內容。如果是雜湊、公鑰等原始位元組,請把輸入方式切換為「十六進位」。
  4. 只有當字串帶有 4 位元組校驗和時才需要開啟 Base58Check,然後複製或下載結果。

什麼是 Base58?

Base58 是為比特幣設計的二進位轉文字編碼。它的字母表由數字和拉丁字母組成,但去掉了四個容易看錯的字元:0(數字零)、O(大寫 o)、I(大寫 i)和 l(小寫 L)。字母表中也沒有 +、/、=,因此雙擊就能選中整個字串,放進 URL 也無需轉義。

與 Base64 不同,Base58 不按位分組,而是把整個輸入當作一個大整數,用 58 進製表示。因此它沒有填充,改動一個位元組可能會影響很多輸出字元。開頭的零位元組在數值上沒有意義,為了保留它們,每個前導零位元組都會寫成字母表的第一個字元(Bitcoin 字母表中是 1)。編碼結果約為原資料的 1.37 倍。

Base58 的常見用途

  • 比特幣。傳統地址和 WIF 私鑰採用 Base58Check,即帶版本位元組和校驗和的 Base58。
  • IPFS。CIDv0 內容識別符號是 SHA-256 多重雜湊(multihash)的 Base58 形式,所以這類 CID 長度為 46 個字元,並以 Qm 開頭。
  • Solana。公鑰、賬戶地址和交易簽名都使用不帶校驗和的普通 Base58。32 位元組的公鑰通常編碼為 43 或 44 個字元。
  • Flickr 和 XRP Ledger。Flickr 短連結使用 Flickr 字母表;XRP 地址使用 Ripple 字母表,這也是它們以 r 開頭的原因。

如果要在 Base58 和原始位元組之間轉換,可以使用 Base58 轉十六進位 和 十六進位轉 Base58。如果只需要由字母和數字組成的 ID,也可以瞭解 Base62。

Base58 字母表

字母表字元(按順序)
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

三種字母表包含相同的 58 個字元,只是順序不同。用一種字母表編碼的字串,換成另一種字母表解碼會得到不同的位元組,或者直接報錯。

在程式碼中使用 Base58

# Python(pip install base58)
import base58
base58.b58encode(b'hello')      # b'Cn8eVZg'
base58.b58decode('Cn8eVZg')     # b'hello'

// JavaScript(npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));

編碼規格

字母表1-9 A-Z a-z,去掉 0 O I l
輸出體積約 137%(大數進位轉換)
填充無(前導零位元組編碼為 1)
標準Bitcoin Base58
區分大小寫是

編碼範例

輸入 (UTF-8)輸出
Hello, World!72k1xXWG59fYdzSNoA
Base64.isr1Nm3AS7ZcnN
你好2xuZUfBKa

常見問題

為什麼前導零位元組會變成 1?
Base58 把輸入轉換成一個整數,而開頭的零位元組不會改變這個數值。為了保留它們,每個前導零位元組都寫成字母表的第一個字元,在 Bitcoin 字母表中就是 1。所以 32 個零位元組會編碼成 32 個連續的 1。
Base58 區分大小寫嗎?

區分。大寫和小寫字母代表不同的數值,改動任意一個字元的大小寫都會改變解碼結果,或者讓字串變得無效。

Base58 和 Base58Check 有什麼區別?
Base58Check 在編碼前追加 4 位元組校驗和(雙重 SHA-256 雜湊的前 4 個位元組),用來發現輸入錯誤。在本頁開啟 Base58Check 選項即可使用,詳細說明見 Base58Check 頁面。
為什麼輸入限制在約 20 KB?
由於整個輸入被當作一個大整數處理,計算量會隨長度的平方增長。Base58 適合金鑰、雜湊和地址,而不是檔案。處理大量資料請使用 Base64 或 Base85。