[Base64.sh]

zh-Hant v

[指南] 8 分鐘閱讀

[指南] 完整 Base64 參考

關於 Base64 編碼您需要知道的一切:理論、實現和最佳實踐。

2025年1月 | fundamentals

// 什麼是 BASE64?

Base64 是一種二進制到文本的編碼方案,使用 64 個 ASCII 字符來表示二進制數據。它旨在對需要在為文本數據設計的媒體上儲存和傳輸的二進制數據進行編碼。

Base64 字符集包括 A-Z、a-z、0-9,以及兩個附加字符(通常是 + 和 /),加上用於填充的 =。

// BASE64 如何運作

Base64 編碼通過將二進制數據轉換為 ASCII 字符字符串來工作。該過程包括:

1. 將輸入分割成 6 位塊(Base64 每個字符使用 6 位) 2. 將每個 6 位值映射到 Base64 字母表中的字符 3. 如需要,添加 '=' 字符進行填充

// 示例:將 'Man' 編碼為 Base64
// 'M' = 01001101,'a' = 01100001,'n' = 01101110
// 組合:010011010110000101101110
// 分成 6 位組:010011 010110 000101 101110
// 十進制值:19、22、5、46
// Base64 字符:T、W、F、u
// 結果:'TWFu'

// 常見用途

  • > 在 HTML/CSS 中嵌入圖像(data URIs)
  • > 為 JSON APIs 編碼二進制數據
  • > 電子郵件附件(MIME 編碼)
  • > 在數據庫中儲存二進制數據
  • > 身份驗證令牌和 API 密鑰
  • > URL 安全的數據傳輸

// JAVASCRIPT 實現

現代瀏覽器提供內建的 Base64 編碼和解碼函數:

要將文本編碼為 Base64,請使用 btoa()(binary to ASCII)。要將 Base64 解碼為文本,請使用 atob()(ASCII to binary)。

// 將文本編碼為 Base64
const text = '您好,世界!';
const encoded = btoa(text);
console.log(encoded); // 5oKo5aW977yM5LiW55WM77yB

// 將 Base64 解碼為文本
const decoded = atob(encoded);
console.log(decoded); // 您好,世界!

// 對於 Unicode 字符串,使用 TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();

const unicodeText = '您好,世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);

// 安全考慮

Base64 不是加密或安全措施。它僅僅是用於數據表示的編碼。重要的安全注意事項:

絕不要僅使用 Base64 來保護敏感數據。始終驗證 Base64 輸入以防止注入攻擊。請注意 Base64 會使數據大小增加約 33%。

  • > Base64 很容易逆轉 - 它不提供安全性
  • > 始終驗證和清理 Base64 輸入
  • > 對敏感數據使用適當的加密
  • > 考慮為網路應用程式使用 URL 安全的 Base64 變體
  • > 在某些情況下要注意填充 oracle 攻擊

// 最佳實踐

  • > 為網路應用程式使用 URL 安全的 Base64(將 + 替換為 -,/ 替換為 _)
  • > 始終正確處理填充
  • > 驗證輸入長度和字符
  • > 對於大數據考慮編碼前壓縮
  • > 對於非常大的數據集使用串流
  • > 為無效輸入實現適當的錯誤處理