什麼是 Base64 解碼器?
Base64 是一種編碼方式,使用 64 個可列印的 ASCII 字元(A–Z、a–z、0–9、+ 與 /)來表示二進位資料。它常被用來把圖片內嵌到 HTML 中、在 JSON 或網址裡傳遞資料,以及為電子郵件附件進行編碼。這個解碼器則執行相反的動作——把 Base64 字串還原回它原本所代表的純文字。
使用方式
將你的 Base64 字串貼上或輸入到輸入框中,然後送出。工具會移除所有空白字元、解碼後顯示還原出的文字,同時列出解碼後的位元組數、輸入的字元數,以及出現了幾個填充字元('=')。如果輸入內容含有 Base64 字母集以外的字元,畫面就會顯示「無效」訊息。
公式說明
每個 Base64 字元可編碼 6 個位元的資料,因此 4 個 Base64 字元帶有 \(4 \times 6 = 24\) 個位元,正好能整齊地重新分組成三個 8 位元的位元組。當原始資料的長度不是 3 的倍數時,就會在結尾補上一或兩個 '=' 填充字元,讓編碼後的字串長度永遠是 4 的倍數。在解碼過程中,這些填充字元會被去除,多餘的位元也會被捨棄。
$$\text{Bytes} = \left\lfloor \frac{6 \times \text{Base64 chars (no padding)}}{8} \right\rfloor$$
實際範例
以 Base64 字串 SGk= 為例。各字元對應的數值為 S=18、G=6、k=36,而 '=' 則是填充字元。轉成二進位:\(010010\ 000110\ 100100\) → 共 24 個位元,但結尾的填充代表只有 2 個位元組是有效的:\(01001000\)(72 = 'H')與 \(01101001\)(105 = 'i')。最終結果就是 Hi。
Base64 字母表參考
標準 Base64 (RFC 4648) 將每個 6 位元值 (0–63) 映射到 64 個可列印 ASCII 字元中的一個。解碼器讀取每個字元,在此表格中查詢其 6 位元索引,串連這些位元,並將其重新分組為 8 位元位元組。下表列出了完整的字母表以及分配給每個字元的索引。
| 索引 | 字元 | 索引 | 字元 | 索引 | 字元 | 索引 | 字元 |
|---|---|---|---|---|---|---|---|
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| 2 | C | 18 | S | 34 | i | 50 | y |
| 3 | D | 19 | T | 35 | j | 51 | z |
| 4 | E | 20 | U | 36 | k | 52 | 0 |
| 5 | F | 21 | V | 37 | l | 53 | 1 |
| 6 | G | 22 | W | 38 | m | 54 | 2 |
| 7 | H | 23 | X | 39 | n | 55 | 3 |
| 8 | I | 24 | Y | 40 | o | 56 | 4 |
| 9 | J | 25 | Z | 41 | p | 57 | 5 |
| 10 | K | 26 | a | 42 | q | 58 | 6 |
| 11 | L | 27 | b | 43 | r | 59 | 7 |
| 12 | M | 28 | c | 44 | s | 60 | 8 |
| 13 | N | 29 | d | 45 | t | 61 | 9 |
| 14 | O | 30 | e | 46 | u | 62 | + |
| 15 | P | 31 | f | 47 | v | 63 | / |
= (等號) 是第 65 個符號,不是數據字元。它是編碼字符串末尾使用的填充標記,使總長度始終是 4 個字元的倍數。一個= 表示最後的 4 字元組編碼 2 個位元組;兩個== 表示它編碼 1 個位元組。解碼器會丟棄填充及其隱含的多餘零位元。
更多解碼示例
每個 Base64 字元貢獻 6 位元。四個字元 (24 位元) 精確解碼為 3 個位元組;部分組使用填充,以便解碼器知道要保留多少個位元組。位元組計數遵循 \(\text{位元組} = \left\lfloor \frac{6 \times n}{8} \right\rfloor\),其中 \(n\) 是實際 (非填充) 字元的數量。
示例 1 — 無填充:"TWFu" → "Man"
- 索引:T=19, W=22, F=5, u=46。
- 6 位元組:
010011 010110 000101 101110。 - 重新分組為位元組:
01001101 01100001 01101110= 77, 97, 110。 - ASCII 77, 97, 110 = M, a, n。當 \(n=4\) 時:\(\lfloor 24/8 \rfloor = 3\) 個位元組 — Man。
示例 2 — 一個 '=' 填充:"SGVsbG8=" → "Hello"
- 去掉填充:7 個真實字元 S,G,V,s,b,G,8。
- 索引:S=18, G=6, V=21, s=44, b=27, G=6, 8=60。
- 位元:
010010 000110 010101 101100 011011 000110 111100(填充組的尾部 2 位元是零填料,已丟棄)。 - 位元組:
01001000 01100101 01101100 01101100 01101111= 72, 101, 108, 108, 111 = H, e, l, l, o。 - 當 \(n=7\) 時:\(\lfloor 42/8 \rfloor = 5\) 個位元組 — Hello。
示例 3 — 兩個 '==' 填充:"aGk="... 和 "TQ==" → "M"
- 去掉填充:2 個真實字元 T, Q。
- 索引:T=19, Q=16。
- 位元:
010011 010000;只保留前 8 位元,其餘 4 位元是零填料。 - 位元組:
01001101= 77 = M。 - 當 \(n=2\) 時:\(\lfloor 12/8 \rfloor = 1\) 個位元組 — M。
若要反向操作並從文字產生這些字符串,請使用 Base64 編碼器。
重要術語
- Base64 字母表
- 固定的 64 個可列印字元集合 (A–Z, a–z, 0–9, + 和 /),用於將二進制數據表示為文字。每個字元代表從 0 到 63 的 6 位元值。
- 填充 ('=')
- 追加在編碼字符串末尾的等號,使其長度是 4 個字元的倍數。它不帶數據;一個 '=' 標記一個 2 位元組的最終組,'==' 標記一個 1 位元組的最終組。
- 六位組 (6 位元)
- 一組 6 位元 — 單個 Base64 字元編碼的單位。四個六位組 (24 位元) 與三個八位組完全對齊。
- 八位組 / 位元組 (8 位元)
- 8 位元單位,是解碼數據的一個位元組的標準大小。Base64 解碼將六位組重新分組為八位組,二進制到文字轉換器也可以逐位說明。
- 空白符去除
- 在解碼前移除空格、製表符和換行符。許多系統在長 Base64 中插入換行符 (例如 PEM 憑證、電子郵件 MIME);健壯的解碼器會忽略此空白符,而不是將其視為數據。
- URL 安全 Base64
- 一種變體 (RFC 4648 §5),用 - 替換 +,用 _ 替換 /,使字符串在 URL 和檔案名中安全。填充通常也被省略。在使用標準解碼器之前,將這些字元轉換回 + 和 /;對於周圍的 URL 本身,請參閱 URL 編碼 / 解碼計算機。
常見問題
我的資料會被傳送到別的地方嗎?解碼邏輯會在伺服器端執行以產生結果,但不會儲存任何輸入內容。請避免貼上機密資訊。
為什麼位元組數不能被 4 整除?位元組數指的是解碼後的輸出位元組,而非輸入字元數。每 4 個輸入字元最多會轉換成 3 個輸出位元組。
填充字元代表什麼意思?一個 '=' 表示最後一組產生了 2 個位元組;兩個 '=' 表示產生了 1 個位元組;沒有填充字元則表示資料長度原本就是 3 的倍數。