Base64 編解碼原理詳解:從概念到實戰應用
Base64 是什麼?
Base64 是一種將二進位資料編碼為 ASCII 文字的方法。它用 64 個可列印字元(A-Z、a-z、0-9、+、/)來表示任意二進位資料。
為什麼需要 Base64?
許多系統只能處理文字資料,無法直接傳輸二進位:
- 電子郵件:SMTP 協定最初只支援 ASCII 文字
- URL:二進位資料無法直接放入 URL
- JSON:無法直接嵌入二進位(如圖片資料)
- HTML/CSS:內嵌圖片需要文字格式
Base64 將二進位轉為文字,解決了這些傳輸限制。
Base64 編碼原理
核心步驟
- 將輸入資料按 3 位元組(24 位)分組
- 將每組 24 位拆為 4 個 6 位數字
- 每個 6 位數字(0-63)對應一個 Base64 字元
- 不足 3 位元組的組用
=填充
編碼表
| 值 | 字元 | 值 | 字元 | 值 | 字元 | 值 | 字元 |
|---|---|---|---|---|---|---|---|
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 25 | Z | 41 | p | 57 | 5 | 63 | / |
編碼範例
輸入: "Hello" (ASCII: 72 101 108 108 111)
二進位: 01001000 01100101 01101100 01101100 01101111
6 位分組: 010010 000110 010101 101100 011011 000110 1111(00)
↓ ↓ ↓ ↓ ↓ ↓ ↓
索引: 18 6 21 44 27 6 60
字元: S G V s b G 8=
結果: "SGVsbG8="
實際應用場景
1. 內嵌圖片(Data URL)
將小圖片編碼為 Base64 直接嵌入 HTML/CSS,減少 HTTP 請求:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..." />
.icon {
background-image: url(data:image/svg+xml;base64,PHN2Zy...);
}
注意:只適合小圖示(< 2KB),大圖片內嵌會增加 HTML 體積。
2. URL 安全編碼
標準 Base64 中的 + 和 / 在 URL 中有特殊意義。URL 安全 Base64 將它們替換:
+→-/→_- 去掉
=填充
標準: a+b/c==
URL 安全: a-b_c
使用 Base64 編解碼工具 可以選擇 URL 安全模式。
3. JWT Token
JWT(JSON Web Token)的三個部分都用 Base64URL 編碼:
Header.Payload.Signature
↑ ↑ ↑
Base64 Base64 HMAC
4. 郵件附件
MIME 郵件中的附件用 Base64 編碼傳輸:
Content-Transfer-Encoding: base64
SGVsbG8gV29ybGQ=
5. 設定檔中的金鑰
許多設定系統用 Base64 儲存二進位金鑰:
apiVersion: v1
kind: Secret
data:
password: cGFzc3dvcmQ= # Base64 編碼
Base64 的注意事項
體積增大
Base64 編碼後體積增加約 33%:
原始: 3 位元組 → 編碼: 4 位元組 (4/3 ≈ 1.33)
| 原始大小 | Base64 大小 | 增加比例 |
|---|---|---|
| 1 KB | 1.33 KB | +33% |
| 100 KB | 133 KB | +33% |
| 1 MB | 1.33 MB | +33% |
安全性誤區
Base64 不是加密! 它只是編碼,任何人都能解碼。不要用 Base64 保護敏感資料。
Base64("password") = "cGFzc3dvcmQ="
Base64Decode("cGFzc3dvcmQ=") = "password" ← 一秒還原
需要加密請使用 AES 加密工具 或 國密 SM4 加密工具。
Base64 變體
Base32
使用 32 個字元(A-Z、2-7),全大寫,適合不區分大小寫的系統(如檔名)。
Base58
比特幣社群設計,去掉了 Base64 中容易混淆的字元(0/O、1/I/l、+/),適合人工抄寫場景。
Base85 / Ascii85
編碼效率更高(4 位元組 → 5 字元,增加 25%),但不如 Base64 通用。
使用工具庫進行 Base64 編解碼
文字編解碼
- 開啟 Base64 編解碼工具
- 輸入文字或 Base64 字串
- 選擇編碼或解碼
- 可選 URL 安全模式
圖片轉 Base64
使用 圖片轉 Base64 工具 將圖片轉為 Data URL。
批次處理
支援批次輸入多行文字,一次性編碼或解碼。
常見問題
解碼後出現亂碼?
可能是原始資料不是 UTF-8 文字。Base64 可以編碼任何二進位資料,但如果原始資料是圖片等非文字格式,解碼為文字會顯示亂碼。
URL 中使用 Base64 報錯?
確保使用 URL 安全變體(替換 +/- 和 /_,去掉 =)。標準 Base64 中的 + 和 / 會破壞 URL 結構。
Base64 和 Hex 編碼怎麼選?
- Base64:體積更小(增 33%),適合傳輸
- Hex:體積更大(增 100%),但可讀性好,適合除錯和顯示
使用 Hex 編解碼工具 進行 Hex 編解碼。
總結
Base64 是最常用的編碼方式之一,理解其原理和應用場景對開發者至關重要。工具庫提供完整的編解碼工具鏈:Base64、Base32、Base58、Hex、URL 編解碼,以及真正的加密工具 AES、國密 SM4 等,全部瀏覽器本機處理,安全可靠。