> 編碼 | 解碼 | base32 <

// Base32編碼用於人類可讀的二進制資料表示

[人性化]

人類友好

使用易於閱讀的字元(A-Z,2-7),避免容易混淆的字元如0、1、8、9。

[安全]

本機處理

所有轉換都在您的瀏覽器中進行。您的資料永遠不會離開您的裝置。

[標準]

RFC 4648

遵循RFC 4648標準,確保與其他系統和應用程式的相容性。

>> 技術資訊

Base32工作原理:

Base32使用32個字元(A-Z和2-7)編碼二進制資料。每5位元組編碼為8字元,提供良好的可讀性和錯誤檢測能力。

範例:

"你好" → 4S6KNZNFW3Q====

為什麼使用Base32:

  • >避免混淆字元,提高可讀性
  • >適合人工輸入和驗證
  • >良好的錯誤檢測能力
  • >適用於不區分大小寫的系統
  • >Google Authenticator等應用使用

>> 常見問題

什麼是Base32編碼?

Base32是一種使用32個可列印字元(A-Z和2-7)來表示二進制資料的編碼方案,特別設計為人類友好和避免字元混淆。

Base32為什麼不使用0、1、8、9?

Base32故意避免使用容易與字母混淆的數字:0(與O混淆)、1(與I混淆)、8(與B混淆)、9(與g混淆),提高可讀性。

Base32和Base64有什麼區別?

Base32使用32個字元,輸出更長但更易讀;Base64使用64個字元,輸出更短但包含特殊字元。Base32更適合人工處理。

何時使用Base32?

Base32適用於需要人工輸入的場景,如二維碼、備份代碼、TOTP密鑰,以及不區分大小寫的檔案系統和協定。

// 速查表

輸入Base32Base64
fMY======Zg==
foMZXQ====Zm8=
fooMZXW6===Zm9v
foobMZXW6YQ=Zm9vYg==
foobaMZXW6YTBZm9vYmE=
foobarMZXW6YTBOI======Zm9vYmFy

// 程式碼範例

CLI      echo -n foobar | base32
Python   base64.b32encode(b'foobar')   /   base64.b32decode(s)
Go       base32.StdEncoding.EncodeToString([]byte("foobar"))
Java     new Base32().encodeToString(bytes)   // commons-codec
Node.js  npm i hi-base32   // no built-in

>> 更多問題

問:Base32、Base64 和 Base16 有什麼區別?

答:三者都來自 RFC 4648,差別只在每個字元攜帶的位元數:Base16 為 4 位元(開銷 100%),Base32 為 5 位元(60%),Base64 為 6 位元(33%)。Base32 較長,但易讀且不分大小寫。

問:Base32 解碼區分大小寫嗎?

答:不區分。RFC 4648 的字母表為大寫,但解碼器應把小寫視為相同。本工具會在解碼前把輸入轉為大寫,因此 jbswy3dp 與 JBSWY3DP 結果相同。

問:Base32 在實際中用在哪裡?

答:常見於 TOTP/2FA 金鑰(Google Authenticator、Authy)、Tor v3 洋蔥位址(56 個字元),以及不分大小寫的系統識別碼,如某些檔案系統或 DNS 標籤。