使用方法
- 貼上要解碼的 Base64,或輸入要編碼的文字。也可以點選「開啟檔案」:內容為 Base64 的檔案會被解碼,其他檔案會被編碼。
- 點選「解碼」或「編碼」。工具預設處於解碼模式,結果會隨輸入即時更新。
- 按需調整變體(標準或 URL 安全)、填充、換行和文字編碼。
- 複製或下載結果,也可以點選交換按鈕,把結果送回輸入框進行反向轉換。
什麼是 Base64?
Base64 是一種把二進位資料轉換為文字的編碼方式,它用 64 個可列印的 ASCII 字元表示任意位元組:A-Z、a-z、0-9、+ 和 /,並用 = 作為填充。藉助 Base64,圖片、金鑰、壓縮檔案等二進位資料可以安全地通過電子郵件、JSON、XML、URL 和 HTML 等只支援文字的渠道傳輸。
編碼時,每次讀取 3 個位元組(24 位),拆成 4 組 6 位的數值。每個 0 到 63 之間的數值對應字母表中的一個字元。如果輸入長度不是 3 的倍數,最後一組會補上一個或兩個 =。因此 Base64 輸出總是比原始資料大約 33%。
Base64 只是編碼,不是加密。任何人都可以解碼,所以不要用它來隱藏密碼或敏感資訊。
Base64 與 Base64URL
標準 Base64 使用的 + 和 / 在 URL 和檔名中有特殊含義。RFC 4648 第 5 節定義的 Base64URL 把它們替換為 - 和 _,並且通常省略填充。JSON Web Token、OAuth 以及需要放進 URL 的場景都使用 Base64URL。本頁的解碼器會自動識別這兩種格式。
| 標準 Base64 | Base64URL | |
|---|---|---|
| 第 62、63 個字元 | + / | - _ |
| 填充 | 需要 = | 可選,通常省略 |
| 可直接用於 URL 和檔名 | 否 | 是 |
| 典型用途 | 電子郵件(MIME)、data URI、JSON、PEM 金鑰 | JWT、OAuth、URL 參數 |
Base64 的常見用途
- 郵件附件。MIME 會把附件編碼為 Base64,並按每行 76 個字元換行。使用「換行」選項即可生成這種格式。
- 嵌入圖片和檔案。Data URI 可以把小圖片、字型或圖示直接寫進 HTML 和 CSS,詳見 圖片轉 Base64 和 Base64 轉圖片。
- API 與配置。JSON 沒有二進位型別,因此介面通常用 Base64 字串傳輸檔案、簽名和金鑰,Kubernetes Secret 中的值也以 Base64 儲存。
- 身份驗證。HTTP Basic 認證把
使用者名稱:密碼編碼為 Base64 傳送,JSON Web Token 則由三段 Base64URL 組成。 - 證書與金鑰。PEM 檔案就是按每行 64 個字元換行的 Base64 編碼 DER 資料。
各程式語言中的 Base64
| 語言 | 編碼 | 解碼 |
|---|---|---|
| JavaScript(瀏覽器) | btoa(binaryString) | atob(base64) |
| Node.js | Buffer.from(str).toString('base64') | Buffer.from(b64, 'base64').toString() |
| Python | base64.b64encode(data) | base64.b64decode(data) |
| PHP | base64_encode($str) | base64_decode($b64) |
| Java | Base64.getEncoder().encodeToString(bytes) | Base64.getDecoder().decode(b64) |
| C# | Convert.ToBase64String(bytes) | Convert.FromBase64String(b64) |
| Go | base64.StdEncoding.EncodeToString(b) | base64.StdEncoding.DecodeString(s) |
| Shell | base64 file.bin | base64 -d file.txt |
瀏覽器中的 btoa 只接受 U+00FF 以內的字元。要編碼中文等 Unicode 文字,需要先用 TextEncoder 等方式轉換為 UTF-8 位元組;本工具預設就按 UTF-8 編碼文字。
不止 Base64
Base64.is 還支援完整的 Base-N 編碼家族:Base32、Base58、Base62、Base85、Ascii85、basE91、Base45、十六進位 和 二進位。如果不確定一段字串用的是哪種編碼,可以試試 編碼識別工具,或用 全部編碼 一次檢視所有結果。
編碼規格
| 字母表 | A-Z a-z 0-9 + / |
|---|---|
| 輸出體積 | 每 3 位元組輸出 4 個字元(約 133%) |
| 填充 | 用 = 補足到 4 的倍數 |
| 標準 | RFC 4648 第 4 節 |
| 區分大小寫 | 是 |
編碼範例
| 輸入 (UTF-8) | 輸出 |
|---|---|
Hello, World! | SGVsbG8sIFdvcmxkIQ== |
Base64.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
常見問題
我的資料會上傳到伺服器嗎?
不會。編碼和解碼完全由瀏覽器中的 JavaScript 完成,您輸入的文字和檔案不會離開您的裝置,頁面載入後即使斷網也能繼續使用。
為什麼解碼後的文字是亂碼?
結尾的等號是什麼意思?
等號是填充字元。Base64 以 4 個字元為一組,當輸入長度不是 3 位元組的倍數時,用 = 補齊最後一組。一個 = 表示最後一組編碼了 2 個位元組,兩個 = 表示只編碼了 1 個位元組。
編碼後資料會變大多少?
Base64 把每 3 個位元組變成 4 個字元,所以輸出比輸入大約 33%;如果開啟換行,還會多出換行符。
Base64 是加密嗎?
不是。Base64 只改變資料的表示形式,沒有金鑰,任何人都能解碼。保護敏感資訊請使用 AES、TLS 等真正的加密手段。