使用方法
- 把十六進位字串貼上到輸入框。源編碼已預選為十六進位,目標編碼為 Base64。
- 無需整理格式:空格、換行、冒號、短橫線以及 0x 或 \x 字首都會被忽略。
- 如果結果要用在 URL、JWT 或 JSON Web Key 中,請把目標編碼改為 Base64URL。
- 複製 Base64 結果。
為什麼要把十六進位轉成 Base64
大多數雜湊工具以十六進位輸出摘要,但很多協議要求使用長度短三分之一的 Base64。典型場景包括:
- 子資源完整性(SRI)。指令碼和樣式表的
integrity屬性使用 Base64 摘要,例如sha384-後接 64 個 Base64 字元。 - 內容安全策略(CSP)。允許內聯指令碼的雜湊寫作
'sha256-...',其中的值是 Base64。 - HTTP API 中的校驗和。
Content-MD5頭和 Amazon S3 的校驗和頭攜帶的是二進位摘要的 Base64,而不是md5sum輸出的十六進位字串。 - 更短的識別符號。UUID 共 16 個位元組,用十六進位寫是 32 位,用無填充的 Base64URL 只需 22 個字元。
支援的十六進位格式
十六進位數字不區分大小寫。解碼前,轉換器會去掉空白字元、換行、冒號、分號、逗號、短橫線,以及 0x、\x、% 和 &#x 字首。因此 AB:CD:EF 這樣的 OpenSSL 指紋、0x12, 0x34 這樣的 C 語言陣列、\x12\x34 這樣的跳脫字元串、百分號編碼的位元組以及帶短橫線的 UUID 都可以直接使用。
清理之後,數字個數必須是偶數,每兩位表示一個位元組。位數為奇數時會提示錯誤,這通常意味著丟失了開頭的 0,比如本應是 0abc 卻寫成了 abc。
要編碼位元組,而不是十六進位文字
一個常見錯誤是把十六進位摘要貼上到普通的「文字轉 Base64」工具裡。這樣編碼的是 0-9a-f 這些字元,而不是它們代表的位元組,結果會比正確值長一倍:SHA-256 摘要會得到 88 個字元,而不是 44 個。SRI 屬性、校驗和頭等需要二進位摘要的地方都會拒絕這樣的值。本轉換器會先把十六進位解碼成位元組,再進行編碼。
# 命令列:十六進位摘要轉 Base64
printf '%s' "$HEX" | xxd -r -p | base64
# 一步生成檔案的 SRI 值
openssl dgst -sha384 -binary script.js | openssl base64 -A
# Python
base64.b64encode(bytes.fromhex(h)).decode()
// Node.js(遇到第一個非十六進位字元會靜默停止)
Buffer.from(h, 'hex').toString('base64')
常見問題
為什麼我的十六進位字串報錯?
要麼輸入中有不屬於十六進位的字元,例如把數字 0 寫成了字母 O;要麼數字個數是奇數。錯誤提示會給出無效字元的位置;如果是奇數位,請檢查是否漏掉了開頭的 0。
Base64 結果會有多長?
先把十六進位位數除以 2 得到位元組數,再按每 3 個位元組 4 個字元計算並向上取整。64 位的 SHA-256 十六進位摘要會變成 44 個 Base64 字元,其中包括一個
=。如何生成子資源完整性(SRI)雜湊?
計算檔案的 SHA-384 摘要,在這裡把十六進位結果轉換為 Base64,然後寫成
integrity="sha384-..."。使用 OpenSSL 也可以一條命令完成:openssl dgst -sha384 -binary file.js | openssl base64 -A。輸出的是標準 Base64 還是 URL 安全格式?
預設輸出帶
+ 和 / 的標準 Base64,這正是 SRI、CSP 和 HTTP 校驗和頭所要求的格式。如果需要 URL 安全的結果,請把目標編碼選為 Base64URL。