Base64 是什麼
Base64 是一種編碼方式。編碼的意思是:換一種寫法表示同一份資料,不需要密碼就能換回來。
它每次取 3 個位元組(24 個位元),切成 4 組 6 位元。每組對到一個字元,字元表是 A–Z、a–z、0–9、+、/,共 64 個。最後不足 3 個位元組時,用 = 補齊長度。規則定義在 RFC 4648 第 4 節。
所以 Base64 的結果大約比原始資料大三分之一(每 3 個位元組變 4 個字元)。
Base64 不能用來保護資料。 它沒有金鑰,貼到任何解碼工具都能立刻還原。要保護資料,請用真正的加密(例如 AES-GCM),並妥善保管金鑰。
使用情境
- 看懂設定檔與 API 回應裡的一串亂碼。 例如 Kubernetes Secret 的值、Email 原始碼裡的附件、某些 API 回傳的
data欄位,常是 Base64。解碼後才看得到內容。 - 把小圖片或檔案放進文字欄位。 例如 CSS 的
data:網址、JSON 裡要夾帶一小段二進位資料。 - 檢查 JWT(JSON Web Token)的內容。 JWT 的前兩段是 URL-safe Base64。解碼後可以看到演算法、到期時間等欄位。注意:解碼看得到內容,不代表驗證了簽章。
範例
| 輸入(文字) | 輸出(Base64) |
|---|---|
Man | TWFu |
a | YQ== |
Hello, 世界 | SGVsbG8sIOS4lueVjA== |
台灣 | 5Y+w54Gj |
反向:把 5LiW55WM 解碼,得到 世界。
URL-safe 格式把 + 換成 -、/ 換成 _(RFC 4648 第 5 節)。例如位元組 FB FF FE:標準格式是 +//+,URL-safe 格式是 -__-。
中文字先轉成 UTF-8 位元組再編碼。一個常用中文字在 UTF-8 佔 3 個位元組,所以「台灣」兩個字剛好變成 8 個 Base64 字元。
常見錯誤
- 以為 Base64 是加密。 把密碼或個資 Base64 後放進網址、程式碼或公開 repo,等於明文公開。任何人都能解回來。
- 中文解碼變亂碼。 原因通常是編碼和解碼用了不同的字元編碼。例如「台灣」用 UTF-8 編碼,卻用 Latin-1 解碼,會看到
å°ç£這種字。本工具一律用 UTF-8。在 JavaScript 裡直接對中文用btoa()會出錯,因為它只接受每個字元 1 個位元組的字串。 - 混用標準格式與 URL-safe 格式。 字串裡有
-或_,就是 URL-safe 格式。用標準解碼器處理會失敗。本工具會自動辨識兩種格式。 - 少了結尾的 `=`。 有些系統(例如 JWT)會省略補位的
=。多數解碼器能處理,但部分嚴格的實作會報錯。長度不是 4 的倍數時,可以在結尾補=再試。 - 複製時多了換行或空白。 Email 等格式會每 76 個字元換行。換行不是 Base64 字元,貼進嚴格的解碼器前要先移除。
常見問題(FAQ)
- Base64 是加密嗎?可以拿來保護密碼嗎?
- 不是加密,也不能保護密碼。Base64 沒有金鑰,任何人都能解碼。保護資料請用加密;儲存密碼請用 bcrypt 或 Argon2 這類密碼雜湊。
- 為什麼 Base64 結尾有一個或兩個
=? =是補位字元。Base64 每 3 個位元組一組,最後一組不滿 3 個時,用=補到 4 個字元。剩 1 個位元組補兩個=,剩 2 個補一個=。- 標準 Base64 和 URL-safe Base64 差在哪?
- 差兩個字元。標準格式用
+和/,這兩個字元在網址裡有特殊意義。URL-safe 格式改用-和_,可以直接放進網址與檔名。JWT 用的就是 URL-safe 格式。 - 中文可以用 Base64 嗎?
- 可以。本工具先把文字轉成 UTF-8 位元組,再做 Base64。解碼時也用 UTF-8 還原。對方若用 Big5 等其他編碼,解出來的中文會變亂碼。
- 我貼上的內容會被上傳嗎?
- 不會。編碼與解碼都在你的瀏覽器裡計算,資料不會送到伺服器。即使如此,仍建議不要把正式環境的密碼或金鑰貼到任何網頁工具。
來源(查核日期 2026-10-21)
- RFC 4648〈The Base16, Base32, and Base64 Data Encodings〉第 4 節(Base64 字元表與補位)、第 5 節(URL-safe 字元表):https://www.rfc-editor.org/rfc/rfc4648
- MDN〈Base64〉:說明
btoa()遇到超過 1 位元組的字元會出錯:https://developer.mozilla.org/en-US/docs/Glossary/Base64