什麼是 Base64 編碼?
Base64 是一種二進位轉文字的編碼方案,使用 64 個字元的字元集將二進位資料表示為 ASCII 字串格式。它最初是為透過 MIME(Multipurpose Internet Mail Extensions,多用途網際網路郵件擴充)傳送電子郵件附件而設計的,至今仍是網路上使用最廣泛的編碼方法之一。
當您需要透過專為文字設計的通道傳送二進位資料——例如圖片、檔案或壓縮的位元組——Base64 就是首選解決方案。它將任意位元組轉換為安全、可攜帶的字串,由字母、數字和幾個特殊字元組成。
Base64 的運作原理
Base64 以 3 位元組(24 位元)為一組處理二進位資料,並將每組轉換為 4 個 Base64 字元。「Base64」這個名稱源於其編碼字元集使用 64 個不同的字元:A-Z、a-z、0-9、+ 和 /。
編碼演算法逐步說明
- 取 3 位元組(24 位元)的輸入資料
- 將其拆分為四個 6 位元組
- 將每個 6 位元值(0-63)對應到 Base64 字元表
- 加入填充(
=)——如果輸入長度不能被 3 整除
以下是一個具體範例。字串 "Man" 的編碼過程如下:
M(ASCII 77)=01001101a(ASCII 97)=01100001n(ASCII 110)=01101110
合併後:01001101 01100001 01101110 → 拆分為 6 位元組:
010011= 19 →T010110= 22 →W000101= 5 →F101110= 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 編碼器和解碼器,在瀏覽器中即時轉換文字或檔案。無需安裝或註冊。