語言:繁體中文

tools / base58

base58/

文字或 hex 與 Base58 互轉,使用比特幣字母表。開頭的 00 位元組對應開頭的 1。

原文

Base58

常見問題

Base58 為什麼沒有 0 O I l,解碼顯示「不在 Base58 字母表裡」怎麼辦

Base58 特意去掉了數字 0、大寫字母 O、大寫字母 I 和小寫字母 l,這幾個字元手寫或用肉眼看很容易混淆,剩下 58 個字元:1 到 9、大寫 A 到 Z(沒有 I 和 O)、小寫 a 到 z(沒有 l)。解碼遇到字母表以外的字元,會指出是第幾個字元、是什麼字元。請先檢查複製時有沒有混入引號、標點符號或看不見的字元;空白和換行會自動忽略。如果這串內容裡本來就有 0、O、I、l,它多半不是 Base58,而是 Base64、hex 或其他編碼。

Base58 解碼後顯示「不是有效的 UTF-8 文字」怎麼辦

表示解出來的位元組不是 UTF-8 文字,私鑰、公鑰雜湊、地址這類資料本來就是二進位資料。把「輸出格式」改成 hex,就能看到原始位元組。文字編碼一律依 UTF-8 處理,用 GBK 等其他編碼寫成的位元組在這裡無法讀成文字,需要用支援該編碼的工具轉換。

Base58 結果開頭的 1 是什麼意思,hex 開頭的 00 為什麼變成 1

Base58 把整串位元組當成一個大整數來換底,開頭的 00 位元組在數值上等於沒有,會遺失,所以約定每個開頭的 00 位元組寫成一個開頭的 1(字母表的第 0 位)。例如 hex 0000010203 的結果是 11Ldp,開頭兩個 1 對應兩個 00。解碼時開頭有幾個 1,就還原出幾個 00 位元組;全是 00 的輸入則只剩下一串 1。

可以解碼比特幣地址嗎,Base58Check 的檢查碼呢

可以解出位元組,但不會驗證。比特幣地址使用的是 Base58Check:版本位元組、資料、4 位元組的檢查碼連在一起再做 Base58。本工具只做一般的 Base58,解碼會得到完整的原始位元組,不會檢查也不會去掉檢查碼,編碼時也不會幫你加上。例如 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa 解碼(輸出選 hex)會得到 25 個位元組:1 個位元組的版本 00、20 個位元組的雜湊,最後 4 個位元組是檢查碼。

Base58 和 Base64 有什麼差別

Base64 使用 64 個字元(包含 + 和 /,結尾可能有 =),每 3 個位元組一組轉換,速度快、長度可預測。Base58 去掉了容易混淆的字元以及 + / =,按兩下就能選取整串,手抄不容易出錯,代價是要把整串資料當成大整數做除法,越長越慢,所以多用在地址、金鑰這類幾十個位元組的短資料上。兩種結果不能互相替代。

為什麼編碼結果和其他網站或函式庫不一樣

請先檢查三點。字母表:本工具使用比特幣字母表,Flickr 的字母表是小寫在前,Ripple 的順序又不同,結果當然不一樣。輸入內容:文字依 UTF-8 原樣編碼,結尾多一個換行或空白,結果就會不同。輸入格式:要編碼的是 hex 位元組就必須選 hex,否則 0a1b 會被當成四個字元的文字。hex 輸入可以用空白、冒號、逗號分隔或加上 0x 前綴,位數必須是偶數。

Base58 輸入有長度限制嗎

有。編碼最多 32768 個位元組,解碼最多 45000 個字元,超過會提示分段處理。Base58 的運算量會隨長度的平方增加,設定上限是為了避免頁面卡住;幾 KB 以內基本上是瞬間出結果。

輸入的內容會上傳嗎

不會。編碼和解碼都在瀏覽器裡完成,不會傳送到伺服器。