03 / 指南
Base64 編碼詳解:何時有用,何時有害
Base64 到底是什麼、精確的 33% 體積開銷、Data URL 與郵件在何處值得這種編碼、為什麼它不是安全機制,以及如何除錯格式錯誤的字串。
編碼,不是加密,也不是壓縮
Base64 是把任意位元組寫成純文字的標準方式。64 個可列印字元——A–Z、a–z、0–9,外加 + 和 /——代表六位一組的資料,因此每三個輸入位元組恰好變成四個輸出字元。這個映射沒有任何祕密,也絕不會比原始資料更小。
- 公開字母表字母表是固定且公開的;任何人用任何語言的一行程式碼都能解碼 Base64 字串,這正是它可互通的原因。
- 沒有保密性它不是加密:沒有金鑰、沒有保密性、沒有存取控制——任何人把訊息貼進解碼器就能讀出內容。
- 絕不會更小它也不是壓縮:輸出總是比輸入大,絕不會更小,因為六位資料要裝進八位字元裡傳輸。
33% 的開銷是精確的
因為三位元組變成四字元,Base64 輸出恆為輸入的三分之四——未計填充約大 33%。一張 900 KB 的圖片會變成約 1.2 MB 文字,這份膨脹會跟著資料走到每一處。
- 線路上傳輸成本:嵌入 HTML 或 CSS 的 Data URL 以文字形式被下載、解析與快取,每次頁面載入都要多付這三分之一。
- 記憶體中記憶體與儲存成本:攜帶 Base64 欄位的 JSON 或 XML 負載以字串形式駐留,有些管線還會把值存兩份——一份編碼、一份解碼。
- 信箱裡郵件會放大它:為傳輸而 Base64 編碼的附件在線路上膨脹三分之一,所以 25 MB 的附件上限實際只意味著約 18 MB 的檔案。
Base64 物有所值之處
Base64 存在的理由是許多通道只能傳文字。郵件標準寫於七位元 ASCII 時代,JSON 裝不下原始位元組,URL 遇到二進位資料就會斷裂——於是一種位元組安全的文字表示就成了橋樑。
圖片轉 Base64 能從最大 4 MiB 的 PNG、JPEG、WebP 或 GIF 產生你真正需要的兩種形態:帶媒體類型前綴的完整 Data URL,以及其下的純 Base64 內容。轉換在分頁內完成,你可以一邊親手測量體積膨脹,一邊確保圖片從未離開裝置。
- Data URLData URL 把小素材內嵌:data:image/png;base64,… 讓圖示或微小佔位圖隨 CSS 或 HTML 一起傳輸,省去一次額外請求。
- 郵件與 MIME郵件附件依賴 Base64,因為 SMTP 是為文字設計的;MIME 把二進位部分編碼,使其在每一跳中繼中完好無損。
- 權杖與憑證權杖與憑證——JWT 分段、PEM 檔案、HTTP Basic 憑據——使用 Base64 或其 URL 安全變體,讓二進位結構適配文字協定。
Base64 不是安全機制
編碼後的樣子看似難以辨認,因此常被誤當作保護。它不是:解碼輕而易舉、瞬間完成、不需要任何憑據。把編碼後的祕密當作安全,是已提交程式碼與日誌中憑據外洩最常見的原因之一。
一個快速的自測可以終結爭論:如果移除這層「保護」不需要金鑰、祕密或權限,那它從來就不是保護——只是格式化。Base64 在設計上就過不了這項檢查,因為它的全部目的就是讓任何接收方無需協調即可解碼。
- 任何人都能讀設定檔裡 Base64 編碼的密碼,只是多了幾步的明文密碼;任何有讀取權限的人都已經擁有了祕密。
- 仍然是憑據出現在 URL、截圖與錯誤報告中的編碼權杖仍然是憑據——要像對待原始值一樣把它們抹掉。
- 用真正的保護真正的保護意味著用金鑰加密、用雜湊做校驗,或者乾脆不暴露這個值;編碼永遠無法替代其中任何一項。
除錯格式錯誤的 Base64
大多數 Base64 故障都是方言問題。經典字母表用 + 和 / 並以 = 填充;URL 安全變體換成 - 和 _ 且常常省略填充;MIME 每 76 個字元折行。期望一種方言的解碼器會拒絕另一種,而錯誤訊息很少說明它想要哪一種。
Base64 編碼 / 解碼把這些方言直接暴露出來:UTF-8 文字、URL 安全輸出與換行處理的開關,加上輸入非法時的明確錯誤——非法字元、不可能的長度、或不是合法 UTF-8 的位元組——讓壞字串告訴你先修正哪一個假設。
- 字母表不匹配字母表不匹配:含 - 或 _ 的 URL 安全字串會被嚴格的經典解碼器拒絕,反之經典 + 和 / 也會破壞 URL 安全處理。
- 填充缺少填充:帶填充的方言要求長度是四的倍數,被剝掉的 = 尾巴會讓嚴格解析器失敗,即使資料完好無損。
- 雜散字元雜散字元:MIME 折行、開頭的 data:…;base64, 前綴,或從郵件客戶端貼來的空格,都會被判為非法輸入。
讓內容留在你的裝置上
Base64 字串通常是某個敏感物的片段:設定檔、權杖、正要發往客戶郵件的圖片。在隨手找到的網站上解碼,等於把這些材料貼進別人的日誌。
Toolars 的兩個工作區都完全在瀏覽器分頁內執行:文字或圖片由已在你裝置上的程式碼處理,絕不會作為操作的一部分被傳輸。轉換時開啟網路監視器——沒有任何請求攜帶你的內容。
這條邊界讓工具可以用於真實工作——解碼同事發來的權杖片段、檢查憑證區塊、為內嵌樣式表轉換產品圖——而不會把一次快速查詢變成一次洩露。
Base64 通常藏在 JSON 裡。
Data URL 與編碼欄位隨 API 負載傳輸——學習一套解析、檢視並 diff 它們的審查流程,全程不把資料發往任何地方。