Crockford Base32 編碼解碼

將文字、十六進位位元組或檔案轉換為 Douglas Crockford 設計的 Base32,也可以反向解碼。解碼器能容忍輸入錯誤:忽略大小寫和連字元,並把 O 讀作 0、把 I 或 L 讀作 1。

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

使用方法

  1. 選擇「編碼」把文字轉換為 Crockford Base32,或選擇「解碼」把它還原為文字。
  2. 保持選擇 Crockford 變體,並確認「填充」已關閉。如果需要小寫輸出,可以勾選「小寫」。
  3. 輸入或貼上內容,也可以開啟檔案。解碼時會忽略連字元和空格。
  4. 複製結果,或將結果下載為檔案。

什麼是 Crockford Base32?

Douglas Crockford 設計這套 Base32 字母表,是為了讓識別符號便於人工閱讀、輸入和口頭傳達。它由 10 個數字和 22 個大寫字母組成:0123456789ABCDEFGHJKMNPQRSTVWXYZ。去掉 I 和 L 是因為它們像數字 1,去掉 O 是因為它像 0,去掉 U 則是為了降低意外拼出不雅英文單詞的可能。

每個符號承載 5 位,因此 5 個位元組變成 8 個字元,與 RFC 4648 Base32 相同。符號按 ASCII 升序排列,所以大小寫一致、不帶填充的字串,其排序與所編碼的資料一致。Crockford 規範不使用填充,因此請保持「填充」選項關閉。

容錯解碼

Crockford 規範要求解碼器接受人們實際輸入的各種寫法,本工具也是這樣處理的:

  • 大寫和小寫字母視為相同。
  • 字母 O 讀作數字 0,字母 I 和 L 讀作 1。
  • 為方便閱讀長程式碼而插入的連字元會被忽略,空格和換行也一樣。

字母 U 不是合法字元,出現時會連同位置一起報錯。

位元組、數字與 ULID

Crockford 的規範以數字為物件來描述編碼,而本工具按 RFC 4648 的方式把位元組序列切成 5 位一組,再用 Crockford 的符號表示。當總位數不是 5 的倍數時,基於數字的實現會把多出的零位補在前面,本工具則補在末尾,因此結果可能不同。

ULID 就是一個典型例子。它使用 Crockford 字母表,但把 128 位的值當作一個數字編碼成 26 個字元,所以 ULID 的 16 個位元組在這裡編碼出的字串並不相同,而解碼 ULID 得到的位元組會錯開兩位。Crockford 規範中可選的校驗符號(表示模 37 餘數的額外字元)本工具不支援,既不會新增也不會驗證。

編碼規格

字母表0-9 A-Z,去掉 I L O U
輸出體積每 5 位元組輸出 8 個字元(160%)
填充無
標準Crockford Base32(2002)
區分大小寫否

編碼範例

輸入 (UTF-8)輸出
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

常見問題

Crockford Base32 區分大小寫嗎?

不區分。輸出預設是大寫,勾選「小寫」可以改為小寫。解碼器兩種寫法都接受,即使在同一個字串中混用也沒問題。

字母表裡為什麼沒有 I、L、O、U?

I 和 L 容易被看成 1,O 容易被看成 0,所以它們被排除在外,解碼時會被當作對應的數字。排除 U 是為了讓隨機生成的程式碼不容易拼出冒犯性的英文單詞。

本工具支援 Crockford 校驗符號嗎?
不支援。規範允許在末尾附加一個表示模 37 校驗值的字元,併為此額外使用 * ~ $ = U 這幾個符號。本工具不會新增或驗證校驗符號,解碼前請先將其刪除。
可以在這裡解碼 ULID 嗎?

無法得到準確的 16 個位元組。ULID 把 128 位當作一個數字編碼,多出的位補在前面,而本工具按位元組分組,把多出的位補在末尾。讀取 ULID 的時間戳和隨機部分請使用專門的 ULID 庫。