這三種名稱都屬於二進位制到文本的表示方案,但約束不同。Base64 與 Base64URL 按六位分組,標準 Base32 按五位分組,使用更小的字母表。應選擇傳輸、儲存和接收程式都能完整儲存的格式。
先比較字母表,再比較長度
標準 Base64 使用大小寫字母、數字、加號和斜槓,Base64URL 把最後兩個字元替換為連字元和下劃線,兩者都區分大小寫。RFC Base32 使用大寫 A–Z 和數字 2–7。解碼器可能相容小寫,但協議應明確接受規則和規範輸出。
不區分大小寫的渠道可能破壞 Base64,卻能儲存規則明確的 Base32。URL 令牌與電話口述程式碼的約束不同,不能只看示例是否短。
理解長度代價
忽略末組後,Base64 每位元組約需 1.33 個字元,Base32 約需 1.6 個。標準 Base32 每五位元組形成八字元組。單位元組 f 的常見向量分別為 Base64 的 Zg== 和 Base32 的 MY======。短輸入的填充比例很高,應使用真實負載比較。
原始位元組: 66(ASCII f)
Base64: Zg==
Base64URL:Zg==,協議允許省略填充時為 Zg
RFC Base32:MY======
不要混用 Base32 變體
Crockford Base32 面向人工讀取的識別符號,字母表與歧義處理規則不同於 RFC Base32;Base32hex 也不相同。文件必須寫明變體、字母表、填充與校驗規則。
編碼不提供認證。輸錯後的字串可能仍然語法合法,只是解碼為另一組位元組。需要人工抄錄時,應考慮協議規定的校驗步驟,而不是假定字母表能發現所有錯誤。
寫清完整約定
約定位元組順序、空輸入、前導零、最大長度、空白和非法字元處理。測試向量應包含高位位元組與不足整組的輸入。分別用獨立參考驗證編碼器和解碼器,避免兩端相同錯誤造成“往返成功”的假象。標準形式與向量見 RFC 4648。