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 安全字符和缺失的填充都会自动处理,密钥参数和签名可以原样粘贴。