程式開發
Base64 編碼是什麼?一次搞懂原理與應用場景
從零開始了解 Base64 編碼的運作原理、編碼過程、常見應用場景,以及使用時需要注意的限制。
什麼是 Base64?
Base64 是一種將二進位資料(Binary Data)轉換為純文字(ASCII 字串)的編碼方式。它的名稱來自於使用 64 個可列印字元來表示任意的二進位資料。
為什麼需要 Base64?
在早期的網際網路中,許多通訊協定(如 SMTP 電子郵件)只能處理純文字(ASCII 字元),無法直接傳輸圖片、音訊等二進位資料。Base64 提供了一種將任何二進位資料編碼為安全的文字格式的方法,確保資料在傳輸過程中不會被損壞。
Base64 的歷史可以追溯到 1987 年的 RFC 989(PEM,Privacy Enhanced Mail),後來在 2006 年的 RFC 4648 中被正式標準化。至今它仍然是網路通訊中最常用的編碼方式之一。
重要澄清:Base64 是編碼(Encoding),不是加密(Encryption)。編碼是可逆的格式轉換,任何人都可以解碼;加密則需要金鑰才能解密。絕對不要用 Base64 來保護敏感資料。
Base64 編碼原理
Base64 的核心原理是將每 3 個位元組(24 bits)的二進位資料,重新切分為 4 組 6 bits,然後用 64 個字元的對照表來表示。
Base64 字母表(共 64 個字元):
• A-Z(26 個)→ 索引 0-25
• a-z(26 個)→ 索引 26-51
• 0-9(10 個)→ 索引 52-61
• + 和 /(2 個)→ 索引 62-63
• = 作為填充字元(padding)
編碼步驟範例 — 將 "Hi" 轉為 Base64:
1. 取得 ASCII 值:H = 72, i = 105
2. 轉為二進位:01001000 01101001
3. 每 6 bits 一組:010010 000110 1001(00)
(不足 6 bits 補 0)
4. 查表:18 → S, 6 → G, 36 → k
5. 不足 4 字元補 =:SGk=
所以 "Hi" 的 Base64 編碼結果是 "SGk="
Padding 規則:
• 原始資料是 3 的倍數 → 不需要 padding
• 餘 1 byte → 末尾加 ==
• 餘 2 bytes → 末尾加 =
常見使用場景
Base64 在現代網路開發中有許多實際應用:
1. 電子郵件附件(MIME):
電子郵件的 SMTP 協定只支援 7-bit ASCII。當你附加圖片或文件時,郵件客戶端會自動用 Base64 編碼附件,接收端再解碼還原。
2. Data URI(嵌入式資源):
可以將小型圖片直接嵌入 HTML 或 CSS 中,避免額外的 HTTP 請求:
<img src="data:image/png;base64,iVBORw0KGgo..." />
適合小於 2KB 的圖示,可減少網路請求數。
3. JWT Token(JSON Web Token):
JWT 的 Header 和 Payload 部分使用 Base64URL 編碼(用 - 取代 +、_ 取代 /、去掉 =),讓 JSON 資料可以安全地放在 URL 或 HTTP Header 中傳輸。
4. API 資料傳輸:
當 API 需要傳輸二進位資料(如圖片、檔案)時,通常會用 Base64 編碼後放入 JSON 的字串欄位中,因為 JSON 格式本身不支援二進位資料。
5. 基本認證(Basic Authentication):
HTTP Basic Auth 將使用者名稱和密碼用冒號連接後進行 Base64 編碼:
Authorization: Basic dXNlcjpwYXNz(即 user:pass 的編碼)
Base64 的限制與注意事項
使用 Base64 時需要注意以下限制:
1. 不是加密!
Base64 只是編碼,任何人都可以輕鬆解碼。絕對不要用它來保護密碼、API 金鑰或任何敏感資料。需要保護資料請使用 AES、RSA 等加密演算法。
2. 檔案大小增加約 33%:
由於每 3 bytes 變成 4 個字元,Base64 編碼後的資料會比原始資料大約 33%(精確比例為 4/3)。如果 Base64 字串中還包含換行符,增幅會更大。
例如:一張 100KB 的圖片編碼後約 133KB。
3. 效能考量:
編碼和解碼需要 CPU 運算。對於大檔案(如影片),使用 Base64 會顯著增加處理時間和記憶體使用。建議大檔案使用直接的二進位傳輸(如 multipart/form-data)。
4. 快取問題:
用 Data URI 嵌入的資源無法被瀏覽器單獨快取。如果同一張圖片在多個頁面使用,用外部檔案 + 快取會更有效率。
5. URL 安全性:
標準 Base64 的 + 和 / 在 URL 中有特殊意義。如果要在 URL 中使用,應使用 Base64URL 變體(將 + 換成 -、/ 換成 _)。
使用 Gigi Tools 的 Base64 工具
Gigi Tools 提供免費的線上 Base64 編碼/解碼工具:
• 即時編碼:貼上任何文字,一鍵轉換為 Base64 格式
• 即時解碼:貼上 Base64 字串,還原為原始文字
• 支援 UTF-8:完整支援中文、日文、表情符號等多位元組字元
• 所有處理在瀏覽器中進行,您的資料不會被上傳到伺服器
常見使用情境:
• 開發者調試 API 回應中的 Base64 資料
• 檢查 JWT Token 的內容(先 Base64 解碼 Header 和 Payload)
• 將小圖片轉為 Data URI 格式
• 編碼需要在 URL 或 JSON 中傳輸的特殊字元
無論您是前端工程師、後端開發者,還是對編碼技術感興趣的學習者,都可以使用這個工具快速處理 Base64 相關需求。