Base64转Hex

在 Base64 与十六进制之间双向转换

Base64

Hex

本地运行 · 粘贴密钥安全无忧
输出将在此处显示…
Base64 → Hex

什么是 Base64 转 Hex?

Base64 转十六进制是在两种常见的二进制到文本编码方案之间转换数据的操作。Base64 使用 64 个 ASCII 字符(A-Z、a-z、0-9、+、/)表示二进制数据,每 3 个字节编码为 4 个字符。十六进制则用由 16 个符号(0-9、a-f)组成的字母表,将每个字节精确表示为两个字符。两种格式之间的转换分两步:先将 Base64 字符串解码为原始字节,再将这些字节重新编码为目标格式。

十六进制表示法是底层编程、密码学和网络协议中二进制数据的标准表示形式。每个十六进制字符直接对应一个 4 位半字节,因此读取单个字节值十分直观。SHA-256 哈希几乎总是以 64 字符的十六进制字符串形式展示。Base64 则侧重紧凑性——同一哈希在 Base64 中仅需 44 个字符——并且是电子邮件附件(MIME)、数据 URI 和 API 负载的标准编码。

两种编码均由 RFC 4648 定义。它们之间的转换是无损的:数据不增不减,仅文本表示形式发生变化。这使得 Base64 转十六进制成为调试加密负载、检查证书指纹或在使用不同显示格式的系统间核验哈希输出时的常规操作。

为什么使用此 Base64 转 Hex 工具?

本工具直接在浏览器中完成 Base64 与十六进制之间的转换,数据不会离开您的设备,转换随输入实时进行。

即时转换
粘贴 Base64 或十六进制后立即查看结果,无需请求服务器。双向模式支持一键切换转换方向。
🔒
隐私优先处理
所有转换均在浏览器本地通过 JavaScript 运行,您的密钥、哈希和令牌绝不会通过网络传输。
双向模式
单击一个按钮即可在 Base64 转十六进制与十六进制转 Base64 之间切换。工具自动识别并处理标准和 URL 安全型 Base64 变体。
📋
整洁输出,可直接粘贴
输出为不带分隔符或前缀的小写十六进制——这是大多数 API、CLI 和编程语言所期望的格式。一键复制即可使用。

Base64 转 Hex 使用场景

前端开发者
在浏览器 DevTools 控制台中调试二进制协议、WebSocket 帧或 ArrayBuffer 内容时,将 Base64 编码的 API 响应转换为十六进制。
后端工程师
将 JWT 签名或 HMAC 响应中的 Base64 哈希摘要转换为十六进制,与 OpenSSL 或数据库中以十六进制格式存储的值进行比对。
DevOps / SRE
通过将 PEM 文件中的 Base64 公钥转换为浏览器和监控工具所显示的十六进制指纹格式,验证 TLS 证书指纹。
安全分析师
检查 API 流量中以 Base64 传输的加密密钥和初始化向量(IV),转换为十六进制后在 Wireshark 或 CyberChef 中进行字节级分析。
数据工程师
将数据库(PostgreSQL bytea、MongoDB BinData)中 Base64 编码的二进制列转换为十六进制,用于比对、日志记录或迁移脚本。
学习者
通过观察相同字节序列在 Base64 和十六进制中的不同表示方式,理解两者之间的关系,深化对编码原理的认识。

Base64 与十六进制编码对比

Base64 和十六进制都将二进制数据转换为可打印文本,但在紧凑性与可读性之间各有取舍。下表总结了两者的主要差异。

属性Base64Hexadecimal
字母表A-Z a-z 0-9 + / =0-9 a-f
每字符位数64
体积开销比原始数据大约 33%比原始数据大 100%
可读性紧凑但不直观每字节对应 2 个字符,一目了然
主要用途电子邮件、数据 URI、API加密哈希、MAC 地址、颜色值
规范RFC 4648IEEE 754, RFC 4648 sec 8

转换示例

下表展示了相同字节序列在 Base64 和十六进制中的表示形式。注意十六进制输出的长度始终是字节数的两倍,而 Base64 长度等于 ceil(byteCount / 3) * 4。

输入(文本 / 字节)Base64Hex
HelloSGVsbG8=48656c6c6f
ABQUI=4142
0xFFMHhGRg==30784646
AAE=0001
key=vala2V5PXZhbA==6b65793d76616c
Þ­¾ï (bytes)3q2+7w==deadbeef

转换原理

将 Base64 转换为十六进制分两个阶段。首先,将 Base64 字符串解码为原始字节:将每个字符映射到其 6 位值,拼接所有位后按 8 位分割为字节(丢弃填充位)。此步骤是 RFC 4648 第 4 节所定义编码的逆过程。

其次,将每个字节转换为对应的两位十六进制表示。字节值 0–255 映射到 00–ff。例如字节 0x4F(十进制 79)对应字符 '4' 和 'f'。完整的十六进制字符串即是所有两字符对的拼接。反向转换(十六进制转 Base64)则按相反顺序执行:将十六进制对解析为字节,再对结果进行 Base64 编码。

4 位二进制十六进制数字
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010a
1011b
1100c
1101d
1110e
1111f

代码示例

以下可运行代码片段展示了如何在 JavaScript、Python、Go 和命令行中完成 Base64 与十六进制之间的转换,每个示例均涵盖两个转换方向。

JavaScript (browser / Node.js)
// Base64 to Hex
function base64ToHex(b64) {
  const raw = atob(b64)
  return Array.from(raw, c =>
    c.charCodeAt(0).toString(16).padStart(2, '0')
  ).join('')
}
base64ToHex('SGVsbG8=') // → "48656c6c6f"

// Hex to Base64
function hexToBase64(hex) {
  const bytes = hex.match(/.{1,2}/g).map(b => parseInt(b, 16))
  return btoa(String.fromCharCode(...bytes))
}
hexToBase64('48656c6c6f') // → "SGVsbG8="

// Node.js Buffer shorthand
Buffer.from('SGVsbG8=', 'base64').toString('hex')   // → "48656c6c6f"
Buffer.from('48656c6c6f', 'hex').toString('base64')  // → "SGVsbG8="
Python
import base64, binascii

# Base64 to Hex
b64_str = 'SGVsbG8='
raw_bytes = base64.b64decode(b64_str)
hex_str = raw_bytes.hex()            # → '48656c6c6f'
# or: binascii.hexlify(raw_bytes).decode()

# Hex to Base64
hex_str = '48656c6c6f'
raw_bytes = bytes.fromhex(hex_str)
b64_str = base64.b64encode(raw_bytes).decode()  # → 'SGVsbG8='

# One-liner for quick conversion
base64.b64encode(bytes.fromhex('deadbeef')).decode()  # → '3q2+7w=='
Go
package main

import (
    "encoding/base64"
    "encoding/hex"
    "fmt"
)

func main() {
    // Base64 to Hex
    raw, _ := base64.StdEncoding.DecodeString("SGVsbG8=")
    hexStr := hex.EncodeToString(raw)
    fmt.Println(hexStr) // → "48656c6c6f"

    // Hex to Base64
    raw2, _ := hex.DecodeString("48656c6c6f")
    b64Str := base64.StdEncoding.EncodeToString(raw2)
    fmt.Println(b64Str) // → "SGVsbG8="
}
CLI (bash)
# Base64 to Hex (using base64 + xxd)
echo -n 'SGVsbG8=' | base64 -d | xxd -p
# → 48656c6c6f

# Hex to Base64
echo -n '48656c6c6f' | xxd -r -p | base64
# → SGVsbG8=

# OpenSSL alternative
echo -n 'SGVsbG8=' | openssl base64 -d | xxd -p
# → 48656c6c6f

常见问题

Base64 和十六进制有什么区别?
Base64 使用 64 个字符,每字符编码 6 位,相比原始字节约增大 33%。十六进制使用 16 个字符,每字符编码 4 位,开销为 100%——恰好是原始大小的两倍。Base64 更紧凑;十六进制可读性更强,因为每个字节精确对应两个字符。
Base64 转十六进制会丢失数据吗?
不会。Base64 和十六进制都是对相同底层字节的确定性、可逆编码。两者之间的转换不会修改、压缩或加密数据。转换前后原始字节序列完全相同,仅文本表示形式发生变化。
为什么十六进制输出比 Base64 输入更长?
十六进制每字节始终产生 2 个字符,而 Base64 每字节约产生 1.33 个字符。一个 20 字节的值对应 28 个 Base64 字符,但对应 40 个十六进制字符。这是固有的取舍:十六进制更大,但每个字节边界清晰可见。
可以将 Base64url(URL 安全型 Base64)转换为十六进制吗?
可以。Base64url 将 + 替换为 -,将 / 替换为 _,并省略填充。本工具在转换前会自动将 Base64url 输入标准化。在代码中,将 - 替换为 +,将 _ 替换为 /,并在解码前补充填充:结果字节与标准 Base64 完全相同。
如何将 SHA-256 哈希从 Base64 转换为十六进制?
将 Base64 哈希粘贴到本工具即可获得 64 字符的十六进制字符串。在代码中:先将 Base64 字符串解码为字节(SHA-256 为 32 字节),再对这些字节进行十六进制编码。例如在 Python 中:base64.b64decode(b64_hash).hex() 即可得到十六进制表示。
Base64 输入中包含空白字符或换行符会怎样?
大多数 Base64 解码器(包括本工具)会在解码前去除空白字符。PEM 编码的证书和 MIME 编码的内容通常每行 64 或 76 个字符换行。这些换行符不是编码数据的一部分,在转换时会被安全忽略。
什么时候应该使用十六进制而非 Base64?
当需要字节级可读性时使用十六进制——检查加密输出、调试二进制协议或指定颜色值(#ff5733)。当紧凑性更重要时使用 Base64——在 JSON 中嵌入数据、通过电子邮件(MIME)传输,或构建数据 URI。在存储和传输方面,Base64 比十六进制节省约 33% 的空间。