使用方法
- 把 Base64 字串貼上到輸入框。源編碼已預選為 Base64,目標編碼為十六進位。
- 檢視十六進位結果,每個位元組對應兩位十六進位數字。
- 如需其他格式,可以把目標編碼改為 Base58、Base32 等;按「交換」可以把十六進位轉回 Base64。
- 複製結果。
同一組位元組的兩種寫法
十六進位和 Base64 都是把二進位資料寫成文字的方法。十六進位每個位元組用兩個字元,單個位元組的數值一目瞭然,便於閱讀和比對;Base64 把 3 個位元組壓縮成 4 個字元,長度大約短三分之一。兩者之間的轉換隻改變表示方式,資料本身不變:
| 資料 | 位元組數 | 十六進位長度 | Base64 長度 |
|---|---|---|---|
| MD5 雜湊 | 16 | 32 | 24 |
| SHA-1 雜湊 | 20 | 40 | 28 |
| SHA-256 雜湊、Ed25519 公鑰 | 32 | 64 | 44 |
| SHA-384 雜湊 | 48 | 96 | 64 |
| SHA-512 雜湊、Ed25519 簽名 | 64 | 128 | 88 |
十六進位編輯器、抓包分析工具和偵錯程式顯示的也是十六進位,把 Base64 轉成十六進位後,就能和這些工具中看到的資料逐位元組對照。
什麼時候需要把 Base64 轉成十六進位
- 比對雜湊值。
sha256sum等工具輸出的是十六進位,而子資源完整性(SRI)屬性、內容安全策略(CSP)雜湊和Content-MD5等校驗頭使用的是 Base64。把其中一方轉換後才能直接比較。 - SSH 指紋。
ssh-keygen -l以無填充的 Base64 顯示SHA256:指紋,而 SSHFP DNS 記錄以十六進位儲存同一個 SHA-256 摘要。貼上SHA256:之後的部分,即可得到十六進位形式。 - 金鑰、IV 和簽名。除錯加密相關程式碼時,以十六進位檢視位元組,可以方便地核對長度、比較數值,發現多出或缺少的位元組。
支援的輸入格式
Base64 輸入中的空格和換行會被忽略,URL 安全字元 - 和 _ 同樣接受,= 填充可有可無,因此從 JSON、JWT 或終端複製的值都可以直接貼上。轉換針對的是解碼後的位元組:結果是資料本身的十六進位,而不是 Base64 字元的十六進位。如果想檢視一段文字的十六進位編碼,請使用 Base16 工具。
# 命令列
printf '%s' "$B64" | base64 --decode | xxd -p
# Python
base64.b64decode(s).hex()
// Node.js
Buffer.from(s, 'base64').toString('hex')
常見問題
轉換的是 Base64 文字本身,還是它表示的位元組?
是它表示的位元組。工具會先解碼 Base64,再把得到的每個位元組寫成兩位十六進位數字。如果需要 Base64 字串本身的字元編碼,請用 Base16 工具把它當作文字編碼。
為什麼十六進位結果比 Base64 輸入更長?
十六進位每個位元組需要 2 個字元,Base64 只需約 1.33 個字元。32 位元組的 SHA-256 摘要用 Base64 表示是 44 個字元,用十六進位表示則是 64 個字元。
如何得到大寫十六進位或用冒號分隔的格式?
十六進位數字不區分大小寫,大寫和小寫表示的值相同。如果需要特定格式,可以把結果作為十六進位輸入貼上到 Base16 編碼器中,再選擇大寫、空格或冒號分隔符,或者 0x 字首。
可以轉換 JWT 或 JSON Web Key 中的 Base64URL 值嗎?
可以。URL 安全字元和缺失的填充都會自動處理,金鑰參數和簽名可以原樣貼上。