Base64 編碼與解碼
把文字或檔案轉成 Base64,或將 Base64 解碼回可讀的文字。Unicode 能正確處理,一鍵即可切換 URL 安全字元集,解碼時兩種字元集都接受,有無補位字元皆可。
0 個字元 · 0 個字詞 · 0 行
0 個字元 · 0 個字詞 · 0 行
完全在此瀏覽器分頁中執行,您的文字不會被上傳或儲存。
Base64 字元集
索引對應 RFC 4648 的字元。標示的最後兩個在 URL 安全版本中不同:62 是 + 或 -,63 是 / 或 _。
- 0A
- 1B
- 2C
- 3D
- 4E
- 5F
- 6G
- 7H
- 8I
- 9J
- 10K
- 11L
- 12M
- 13N
- 14O
- 15P
- 16Q
- 17R
- 18S
- 19T
- 20U
- 21V
- 22W
- 23X
- 24Y
- 25Z
- 26a
- 27b
- 28c
- 29d
- 30e
- 31f
- 32g
- 33h
- 34i
- 35j
- 36k
- 37l
- 38m
- 39n
- 40o
- 41p
- 42q
- 43r
- 44s
- 45t
- 46u
- 47v
- 48w
- 49x
- 50y
- 51z
- 520
- 531
- 542
- 553
- 564
- 575
- 586
- 597
- 608
- 619
- 62+ -
- 63/ _
輸出長度會增加多少
每 3 個輸入位元組會變成 4 個字元;最後剩下 1 或 2 個位元組時,標準 Base64 以 = 補齊,URL 安全版本則不補齊。
| 輸入 | 位元組 | 標準 | URL 安全 | 長度 |
|---|---|---|---|---|
U | 1 | VQ== | VQ | 4 |
Ul | 2 | VWw= | VWw | 4 |
Ult | 3 | VWx0 | VWx0 | 4 |
UltK | 4 | VWx0Sw== | VWx0Sw | 8 |
UltKi | 5 | VWx0S2k= | VWx0S2k | 8 |
UltKit | 6 | VWx0S2l0 | VWx0S2l0 | 8 |
Base64 的用途
Base64 定義於 RFC 4648,使用 64 個可列印的 ASCII 字元來表示任意位元組:A–Z、a–z、0–9、+ 與 /。每三個位元組(24 位元)會被拆成四個 6 位元的數字,每個數字對應字元表中的一個字元。當輸入長度不是 3 的倍數時,最後一組會以一個或兩個 = 補齊。輸出結果一律比原始資料大約多 33%:每 3 個位元組變成 4 個字元。
它的存在是因為許多傳輸管道原本就是為文字設計的。電子郵件(MIME)、HTML 與 CSS 中的 data: URL、承載圖片或憑證的 JSON 欄位,以及 HTTP Basic 驗證標頭,都使用 Base64 來安全傳送二進位資料。它不是加密,也無法隱藏任何內容;解碼不需要金鑰。
Unicode 與 URL 安全版本
Base64 編碼的是位元組而不是文字,所以文字必須先轉成位元組。本工具一律使用 UTF-8,也就是網路通用的編碼:é 會變成兩個位元組,一個 emoji 則是四個。瀏覽器內建的 btoa 函式遇到 U+00FF 以上的字元就會報錯,這也是簡易編碼器處理重音字母與 emoji 時會失敗的原因;這裡的文字會先經過 TextEncoder,解碼時再以 TextDecoder 還原。如果解碼後的位元組不是有效的 UTF-8(例如圖片或 zip 檔),工具會以十六進位顯示,而不是顯示亂碼。
標準 Base64 使用的 + 與 / 在網址和檔名中有特殊意義。RFC 4648 第 5 節的 URL 安全字元表會以 - 和 _ 取代它們,而且通常省略補位字元。JSON Web Token 使用的正是這種形式。解碼器可接受兩種字元表,也接受缺少補位的內容,所以兩種都可以直接貼上。
將檔案和圖片編碼為 Base64
選擇檔案後,工具會在本機以 FileReader 讀取,並回傳其 Base64,或是附上檔案 MIME 類型的完整 data: URL,可直接貼進 img 標籤或 CSS 背景。內嵌圖片可省下一次 HTTP 請求,但大小會增加三分之一,且無法單獨快取,因此適合小圖示,不適合照片。若需要圖片預覽以及現成的 HTML 與 CSS 程式碼片段,請使用 圖片轉 Base64。
常見問題
- 為什麼 Base64 輸出比原本的內容還長?
- 每 3 個位元組會變成 4 個字元,所以輸出大小約為輸入的 4/3,再加上最多兩個補位字元。非 ASCII 文字會更長,因為 UTF-8 每個字元使用 2 到 4 個位元組。
- 結尾的 = 符號是什麼?
- 是補位字元。當輸入長度不是 3 的倍數時,它們能讓輸出長度成為 4 的倍數。一個 = 表示最後一組有兩個位元組,兩個 = 表示最後一組只有一個位元組。
- 為什麼解碼時出現「無效字元」錯誤?
- 輸入中含有字元表以外的內容,例如單字中間的空格、引號,或網址編碼產生的 %。換行與缺少補位可以容忍,其他字元則不行。
- 用 Base64 編碼密碼安全嗎?
- Base64 沒有任何保護作用。HTTP Basic 驗證就是以 Base64 傳送 user:password,因此只能在 HTTPS 下使用。要保護機密資料,請使用真正的加密或雜湊。
- Base64 和 Base64url 有什麼差別?
- 只有兩個字元與補位不同:Base64url 以 - 和 _ 取代 + 和 /,且通常省略 =,因此結果可直接放進網址和檔名而不必跳脫。