這是軟體界最常見的誤解之一:有人看到 cGFzc3dvcmQ= 這種字串,就以為資料被「加密」了。其實沒有。Base64 是編碼,不是加密 —— 搞混這兩者會導致真正的資安錯誤。我們來釐清。
Base64 到底做了什麼
Base64 把任意位元組用 64 個可列印字元(A–Z、a–z、0–9、+、/)來表示。它的用途是傳輸:讓你把二進位或特殊字元透過只能處理文字的通道帶過去 —— email 內文、JSON 欄位、Data URI、JWT 段落等等。
關鍵是,Base64 沒有金鑰、沒有秘密。任何人都能在瞬間解回原文。試試看:把 cGFzc3dvcmQ= 貼進 Base64 工具,立刻就會得到 password。
編碼 vs 加密
| 編碼(Base64) | 加密 | |
|---|---|---|
| 目的 | 讓資料能安全傳輸 | 讓資料對他人不可讀 |
| 金鑰/秘密 | 無 | 有 —— 需要金鑰 |
| 任何人都能還原? | 是,輕而易舉 | 否,只有持金鑰者 |
| 提供機密性? | ❌ 否 | ✅ 是 |
編碼談的是表示方式;加密談的是保密。它們解決完全不同的問題。
一個相關概念:雜湊
大家也常把 Base64 跟雜湊搞混。雜湊(如 SHA-256)是單向函數 —— 你無法從結果反推原文 —— 用於完整性校驗與密碼儲存,而非傳輸。想實驗的話,我們的 Hash 產生器會示範同一輸入永遠產生相同的固定長度指紋。
所以有三個不同的概念:
- 編碼(Base64):任何人可還原,用於傳輸。
- 雜湊(SHA-256):單向,用於完整性。
- 加密(AES、RSA…):只有持金鑰者能還原,用於保密。
要避免的資安錯誤
千萬別用 Base64 來「藏」密碼、API 金鑰或任何機敏值。因為它可被輕易還原,對機密提供的保護是零。若需要機密性,請用真正的加密(例如傳輸中用 TLS、靜態資料用 AES),並妥善儲存憑證。
Base64 適合用在哪
當你確實需要把二進位或特殊資料透過文字通道傳遞時,Base64 很完美:
- 把小圖片轉成 Data URI 內嵌到 HTML 或 CSS。
- 檢視或組裝 JWT 的各段落。
- 在 JSON API 中傳遞二進位內容。
- 把特殊字元安全地放進某個值裡。
拿它做它擅長的事 —— 表示 —— 需要保密時再用加密。你可以用我們免費、在瀏覽器執行的 Base64 工具(完整支援 UTF-8)來編碼與解碼。