Base64 轉十六進位

貼上 Base64,即可看到同一組位元組的十六進位形式。適合比對雜湊值、檢查金鑰和簽名,以及核對不同工具以不同格式顯示的指紋。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 把 Base64 字串貼上到輸入框。源編碼已預選為 Base64,目標編碼為十六進位。
  2. 檢視十六進位結果,每個位元組對應兩位十六進位數字。
  3. 如需其他格式,可以把目標編碼改為 Base58、Base32 等;按「交換」可以把十六進位轉回 Base64。
  4. 複製結果。

同一組位元組的兩種寫法

十六進位和 Base64 都是把二進位資料寫成文字的方法。十六進位每個位元組用兩個字元,單個位元組的數值一目瞭然,便於閱讀和比對;Base64 把 3 個位元組壓縮成 4 個字元,長度大約短三分之一。兩者之間的轉換隻改變表示方式,資料本身不變:

資料位元組數十六進位長度Base64 長度
MD5 雜湊163224
SHA-1 雜湊204028
SHA-256 雜湊、Ed25519 公鑰326444
SHA-384 雜湊489664
SHA-512 雜湊、Ed25519 簽名6412888

十六進位編輯器、抓包分析工具和偵錯程式顯示的也是十六進位,把 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 安全字元和缺失的填充都會自動處理,金鑰參數和簽名可以原樣貼上。