🔐
← 返回教學列表

什麼是 Base64?初學者完整指南

· 標籤: base64, encoding, binary-to-text, web-development, data-transfer

什麼是 Base64 編碼?

Base64 是一種二進位轉文字的編碼方案,使用 64 個字元的字元集將二進位資料表示為 ASCII 字串格式。它最初是為透過 MIME(Multipurpose Internet Mail Extensions,多用途網際網路郵件擴充)傳送電子郵件附件而設計的,至今仍是網路上使用最廣泛的編碼方法之一。

當您需要透過專為文字設計的通道傳送二進位資料——例如圖片、檔案或壓縮的位元組——Base64 就是首選解決方案。它將任意位元組轉換為安全、可攜帶的字串,由字母、數字和幾個特殊字元組成。

Base64 的運作原理

Base64 以 3 位元組(24 位元)為一組處理二進位資料,並將每組轉換為 4 個 Base64 字元。「Base64」這個名稱源於其編碼字元集使用 64 個不同的字元:A-Za-z0-9+/

編碼演算法逐步說明

  1. 取 3 位元組(24 位元)的輸入資料
  2. 將其拆分為四個 6 位元組
  3. 將每個 6 位元值(0-63)對應到 Base64 字元表
  4. 加入填充=)——如果輸入長度不能被 3 整除

以下是一個具體範例。字串 "Man" 的編碼過程如下:

  • M(ASCII 77)= 01001101
  • a(ASCII 97)= 01100001
  • n(ASCII 110)= 01101110

合併後:01001101 01100001 01101110 → 拆分為 6 位元組:

  • 010011 = 19 → T
  • 010110 = 22 → W
  • 000101 = 5 → F
  • 101110 = 46 → u

因此 "Man" 變成 "TWFu"

填充字元的說明

如果輸入長度不是 3 位元組的倍數,Base64 會加入填充字元(=),使輸出長度成為 4 的倍數:

  • 1 位元組輸入 → 2 個 Base64 字元 + 2 個填充字元(==
  • 2 位元組輸入 → 3 個 Base64 字元 + 1 個填充字元(=

例如,對應於 "M" 的單一位元組會編碼為 TQ==

Base64 字元表

| 值 | 字元 | 值 | 字元 | 值 | 字元 | 值 | 字元 | |-------|------|-------|------|-------|------|-------|------| | 0 | A | 16 | Q | 32 | g | 48 | w | | 1 | B | 17 | R | 33 | h | 49 | x | | 2 | C | 18 | S | 34 | i | 50 | y | | 3 | D | 19 | T | 35 | j | 51 | z | | 4 | E | 20 | U | 36 | k | 52 | 0 | | 5 | F | 21 | V | 37 | l | 53 | 1 | | 6 | G | 22 | W | 38 | m | 54 | 2 | | 7 | H | 23 | X | 39 | n | 55 | 3 | | 8 | I | 24 | Y | 40 | o | 56 | 4 | | 9 | J | 25 | Z | 41 | p | 57 | 5 | | 10 | K | 26 | a | 42 | q | 58 | 6 | | 11 | L | 27 | b | 43 | r | 59 | 7 | | 12 | M | 28 | c | 44 | s | 60 | 8 | | 13 | N | 29 | d | 45 | t | 61 | 9 | | 14 | O | 30 | e | 46 | u | 62 | + | | 15 | P | 31 | f | 47 | v | 63 | / |

Base64 編碼的常見應用場景

電子郵件附件(MIME)

Base64 是為 MIME(多用途網際網路郵件擴充)而建立的。SMTP 等電子郵件通訊協定是為 7 位元 ASCII 文字設計的,因此 PDF、圖片和 ZIP 檔案等二進位附件在透過電子郵件傳送之前必須編碼為 Base64。

HTML 和 CSS 中的 Data URL

Base64 讓您可以使用 Data URL 將圖片、字型和其他媒體直接嵌入 HTML 或 CSS 檔案中:

<img src="data:image/png;base64,iVBORw0KGgo..." alt="Embedded Image" />

這樣可以省去一次額外的 HTTP 請求,對於小型資源非常有益。

JSON Web Token(JWT)

JWT 使用 Base64 的 URL 安全變體(Base64url)來編碼每個 Token 的標頭、酬載和簽章。這就是為什麼您會在身分驗證系統中看到像 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 這樣的字串。

在資料庫中儲存二進位資料

許多資料庫針對文字儲存進行了最佳化,可能無法妥善處理原始位元組。將二進位資料編碼為 Base64 後,您就可以將圖片、序列化物件或加密資料儲存在文字欄位中。

API 酬載

當透過 REST 或 GraphQL API 傳送二進位資料時——尤其是在 JSON 格式中——Base64 是標準選擇,因為 JSON 無法原生表示原始位元組。

Base64 會增加檔案大小嗎?

會。Base64 編碼會使資料大小增加約 33%。每 3 位元組的輸入會產生 4 位元組的輸出。這個開銷是使二進位資料能夠在純文字通道上傳輸的代價。

Base64 是加密嗎?

不是。這是一個常見的誤解。Base64 是一種編碼方案,而非加密。任何收到 Base64 字串的人都可以無需任何金鑰就將其解碼回原始資料。它完全不提供任何安全性或機密性。如果您需要保護資料,請使用加密(例如 AES),然後可選擇性地將加密後的位元組以 Base64 編碼以便傳輸。

Base64 與其他二進位轉文字編碼的比較

| 編碼 | 字元集大小 | 開銷 | 最適合用於 | |----------|--------------|----------|----------| | Base64 | 64 個字元 | ~33% | 資料傳輸和嵌入 | | Base32 | 32 個字元 | ~60% | 人類可讀、不區分大小寫的情境 | | Base16(Hex) | 16 個字元 | 100% | 除錯、記憶體傾印、顏色代碼 | | Ascii85 | 85 個字元 | ~25% | Adobe PostScript、PDF 串流 |

Base64 在空間效率和廣泛相容性之間提供了平衡的取捨,使其成為網路上最受歡迎的二進位轉文字編碼。

線上試用 Base64 編碼

準備好編碼您自己的資料了嗎?使用我們的免費線上 Base64 編碼器和解碼器,在瀏覽器中即時轉換文字或檔案。無需安裝或註冊。