Base62 通常使用數字、大小寫字母,因此適合沒有標點的緊湊識別符號。Base64 使用 64 個符號,按位分組。雖然名字相近,很多 Base62 實現會把輸入作為整數處理,互操作問題也因此不同。
字母表順序屬於格式的一部分
不同庫可能先放大寫字母,也可能先放小寫字母。同一個字串就會代表不同數值。例如 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 與小寫在前的字母表並不相容。協議必須記錄順序和測試向量,僅寫“Base62”不夠。
大小寫同樣重要。代理自動轉小寫、資料庫不區分大小寫的排序規則,或人工規範化,都可能改變值。儲存層忽略大小寫時,普通 Base62 和 Base64 都需要額外設計。
位元組編碼需要保留長度
檔案 01 和 0001 作為無符號整數都等於一,單純整數轉換會丟失差異。面向位元組的 Base62 必須定義前導零處理或長度欄位,隨機令牌和固定長度密碼學資料尤其需要注意。
const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true:整數相等不代表位元組相同
根據資料含義選擇
同一應用內部縮短資料庫整數時,可以使用約定明確的 Base62。獨立系統間傳輸任意位元組時,Base64URL 通常有更清楚的標準契約。它用連字元和下劃線替換標準版標點,仍保持六位分組。
編碼不會增加隨機性。連續整數編碼後仍可預測。如果識別符號需要難以猜測,應先使用密碼學隨機源產生足夠熵,再無損編碼。字串看起來復雜,不代表生成過程安全。
比較長度時,應計入字首、填充和長度後設資料。往返測試至少覆蓋空輸入、零位元組、多個前導零和高位位元組。Base64URL 標準見 RFC 4648,Base62 則需要應用自行補全約定。