UltKit

Base64 編碼與解碼

把文字或檔案轉成 Base64,或將 Base64 解碼回可讀的文字。Unicode 能正確處理,一鍵即可切換 URL 安全字元集,解碼時兩種字元集都接受,有無補位字元皆可。

模式

0 個字元 · 0 個字詞 · 0 行

0 個字元 · 0 個字詞 · 0 行

完全在此瀏覽器分頁中執行,您的文字不會被上傳或儲存。

Base64 字元集

索引對應 RFC 4648 的字元。標示的最後兩個在 URL 安全版本中不同:62 是 + 或 -,63 是 / 或 _。

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

輸出長度會增加多少

每 3 個輸入位元組會變成 4 個字元;最後剩下 1 或 2 個位元組時,標準 Base64 以 = 補齊,URL 安全版本則不補齊。

輸入位元組標準URL 安全長度
U1VQ==VQ4
Ul2VWw=VWw4
Ult3VWx0VWx04
UltK4VWx0Sw==VWx0Sw8
UltKi5VWx0S2k=VWx0S2k8
UltKit6VWx0S2l0VWx0S2l08

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 以 - 和 _ 取代 + 和 /,且通常省略 =,因此結果可直接放進網址和檔名而不必跳脫。