Base64 轉換器

對 Base64 的文字進行編碼和解碼。

免費線上Base64編碼器和解碼器

Base64 編碼將二進位資料表示為 ASCII 文字 - 常見於 APIs、資料 URI 和電子郵件附件。 Dokall 將純文字編碼為 Base64 並立即將 Base64 解碼回可讀文字。

在偵錯 API 有效負載、使用資料 URI 或編碼小字串以進行傳輸時使用它。處理是本地且即時的。

什麼是 Base64 編碼?

Base64 是一種二進制到文本的編碼方案,用 64 個可列印 ASCII 字符表示二進制數據:A–Z、a–z、0–9、+ 和 /。= 字符用於填充。其設計目的是通過僅處理文本的系統(如電子郵件 MIME 和早期 HTTP)安全傳輸二進制數據。

Base64 不是加密。它不保護數據——任何人都可以解碼。其用途是編碼,而非安全。可將其理解為將任意字節表示為安全文本字符的方式。

Base64 編碼如何工作

Base64 將每 3 個字節(24 位)的輸入拆分為四個 6 位組。每個 6 位組映射到 Base64 字母表中的一個字符。由於 3 字節變成 4 個字符,Base64 輸出始終比輸入大約大 33%。

當輸入長度不是 3 字節的整數倍時,會添加填充。1 字節輸入變成帶 == 填充的 4 個字符;2 字節變成帶 = 填充的 4 個字符;3 字節無需填充。部分實現會省略填充,因為解碼器可根據輸出長度推斷。

何時使用 Base64

在 HTML 或 CSS 中以 data URI 嵌入小圖片:<img src="data:image/png;base64,..."> 可避免額外的 HTTP 請求。這對小圖標(小於 2–3 KB)效果很好,但對較大圖片適得其反,因為 Base64 會使檔案增大 33% 且無法獨立快取。

在 JSON 中發送二進制數據:JSON 沒有二進制類型,因此檔案、圖片和加密密鑰常被 Base64 編碼為字符串,接收端再將字符串解碼回字節。

電子郵件附件通過 MIME 使用 Base64,將二進制檔案編碼為可經過僅處理文本的郵件服務器的 ASCII 文本。

在基於文本的數據庫或配置檔案中存儲小型二進制值。例如,加密密鑰和證書數據常以 Base64 字符串存儲。

Base64 與 Base64url

標準 Base64 使用 + 和 / 作為第 63、64 個字符,並用 = 填充。這些字符在 URL 和檔案名中有特殊含義——+ 在查詢字符串中表示空格,/ 是路徑分隔符,= 是鍵值分隔符。

Base64url 將 + 替換為 -、/ 替換為 _,通常省略填充。它生成可在 URL、檔案名和 HTTP 頭中安全使用而無需額外編碼的令牌。JWT 因此使用 Base64url 編碼——JWT 的每一部分都經 Base64url 編碼,以便令牌可在 URL 查詢參數和 Authorization 頭中傳遞而無需轉義。

不同編程語言中的 Base64

在 JavaScript 中:btoa() 將字符串編碼為 Base64,atob() 解碼。對於二進制數據(Uint8Array),在 Node.js 中使用 Buffer 類,或採用 TextEncoder 與 base64 編碼工具的更現代方式。

在 Python 中:base64 模塊提供 b64encode() 和 b64decode() 用於標準 Base64,以及 urlsafe_b64encode()/urlsafe_b64decode() 用於 Base64url。這些函數處理的是 bytes 對象,而非字符串。

在 Go 中:encoding/base64 包提供 StdEncoding 用於標準 Base64,URLEncoding 用於 Base64url,並有填充與未填充(RawStdEncoding、RawURLEncoding)變體。

在終端中:echo -n "hello" | base64 編碼,echo "aGVsbG8=" | base64 -d(或 --decode)解碼。echo 的 -n 標誌很重要——沒有它,末尾換行也會被編碼。

常見問題

Base64 是加密嗎?
不是。Base64 是編碼,不是加密。任何人都可以將 Base64 字符串解碼回原始數據,無需密鑰或密碼。它不提供機密性。若需保護數據,請使用真正的加密(AES、ChaCha20),然後可選地將密文 Base64 編碼以便安全的文本傳輸。
為什麼 Base64 輸出比輸入大約大 33%?
Base64 將每 3 字節(24 位)表示為 4 個字符(每個編碼 6 位)。因此比例為 4/3,增大約 33%。例如,3 KB 檔案變成約 4 KB 的 Base64。這種開銷使 Base64 不適合大檔案——最適合小載荷。
可以在 HTML 和 CSS 中用 Base64 表示圖片嗎?
可以。使用 data URI:在 HTML 中用 <img src="data:image/png;base64,iVBOR...">,在 CSS 中用 url(data:image/png;base64,...)。這可避免額外的 HTTP 請求。但 Base64 圖片會使 HTML/CSS 檔案增大 33%,無法獨立快取,且解碼前會阻塞渲染。僅對小於 2–3 KB 的小圖片(圖標、小 logo)使用此技巧。
Base64 與 Base64url 有何區別?
標準 Base64 使用 + 和 / 字符,並用 = 填充。Base64url 將 + 替換為 -、/ 替換為 _,通常省略填充。當編碼輸出需在 URL、檔案名或 HTTP 頭中安全使用時,請使用 Base64url。JWT 和許多 API 令牌因此使用 Base64url。
如何在 JavaScript 中編解碼 Base64?
在瀏覽器中:btoa('hello') 返回 'aGVsbG8=',atob('aGVsbG8=') 返回 'hello'。注意:btoa/atob 僅處理 ASCII。對於 Unicode 文本,先用 TextEncoder 編碼:btoa(String.fromCodePoint(...new TextEncoder().encode('hello')))。在 Node.js 中:Buffer.from('hello').toString('base64') 以及 Buffer.from('aGVsbG8=', 'base64').toString()。
Base64 編碼可逆嗎?
是的,Base64 是無損、雙向的編碼。你始終可以將 Base64 轉換回精確的原始字節。這與哈希(單向、不可逆)和有損壓縮(丟棄部分數據)不同。
Base64 使用哪些字符?
標準 Base64 使用 64 個字符:A–Z(26)、a–z(26)、0–9(10)、+ 和 /(2),外加用於填充的 =。Base64url 將 + 替換為 -、/ 替換為 _ 以提高 URL 安全性。所有字符均為可列印 ASCII,使 Base64 適合基於文本的協議。