Base64 實用指南:位分組、填充與校驗

從位元組和六位分組理解 Base64,計算輸出長度,區分規範編碼、可相容格式與不可恢復的錯誤。

Base64 用一組有限的文本字元表示原始位元組,適合只能傳輸文本的場景。它可以還原任意位元組,包括零位元組和無法作為文本顯示的內容。把位元組解釋成文字、圖片或 PDF,是解碼之後的另一個步驟。

三個位元組變成四個字元

一個位元組有八位,三個位元組共 24 位,正好分成四組,每組六位。每組數值對應 64 字元字母表中的一個字元。標準字母表包含大小寫字母、數字、加號和斜槓。例如 ASCII 文本 Man 的十六進位制位元組是 4d 61 6e,結果為 TWFu。

原始位元組:01001101 01100001 01101110
六位分組:010011 010110 000101 101110
對應索引:19     22     5      46
編碼結果:T      W      F      u

等號說明最後一組的長度

剩一個位元組時,輸出兩個字母表字元和兩個等號;剩兩個位元組時,輸出三個字元和一個等號。因此 M 編碼為 TQ==,Ma 編碼為 TWE=。等號不會儲存被截斷的內容,隨意補齊等號不能找回丟失的有效字元。最後一個字元中未使用的位也必須為零,才是規範編碼。

輸入 n 個位元組時,帶填充的輸出長度為 4 × ceil(n / 3)。一個 1,024 位元組的檔案會產生 1,368 個字元,還沒有計算 Data URI 字首或換行。Base64 本身不壓縮資料,傳輸層壓縮屬於另外的處理。

先校驗編碼,再解釋內容

檢查程式是否遵守協議時選擇嚴格模式;處理已知來源的換行、缺失填充或 Data URI 時可以使用相容模式,並檢視調整記錄。未知標點、混合字母表和非零填充位應該調查原因,不能直接刪除。

合法 Base64 也可能解碼出非法 UTF-8、損壞圖片或不完整 PDF。成功解碼只證明編碼層成立。二進位制應按位元組下載,再用對應格式的解析器檢查。規範見 RFC 4648。