如何将 Base64 转换为 Hex
- 把 Base64 粘贴到 输入 · Base64。换行、空格、缺失的
=填充和 URL 安全字符都可以接受。 - 字节显示在 输出 · Hex 中。如果字节符合某种已知格式,状态行的 看起来像 会显示检测到的文件类型。
- 在输出下方选择 大小写、分隔符 和 每行字节数。
- 点击 复制输出 或 下载 hex。保存字节 会把解码后的字节本身写成文件。
反方向转换请使用方向切换 Hex → Base64 或 Hex 转 Base64。
输出选项
Base64 SGkh/w== 包含四个字节。分隔符 设置决定了它们的写法:
| 分隔符 | 输出 | 用途 |
|---|---|---|
| 无 | 486921ff | 与 sha256sum 输出、数据库、URL 中的值对比 |
| 空格 | 48 69 21 ff | 逐字节阅读、hex 编辑器 |
: | 48:69:21:ff | 证书和密钥指纹 |
0x | 0x48 0x69 0x21 0xff | C、C# 或 Java 常量 |
\x | \x48\x69\x21\xff | Python、C 和 shell 中的字符串字面量 |
大小写 可切换为 48 69 21 FF。每行字节数 设为 16 时,会得到熟悉的转储布局,每行 16 个字节,很容易找到偏移 0x40,或数出文件头的长度。
读懂开头的字节
大多数文件格式都以固定的签名开头,这些签名在 hex 中很容易辨认。下面是几个 Base64 前缀及其解码结果:
| Base64 开头 | Hex | 格式 |
|---|---|---|
iVBORw0KGgo | 89 50 4e 47 0d 0a 1a 0a | PNG |
/9j/ | ff d8 ff | JPEG |
JVBERi0 | 25 50 44 46 2d(%PDF-) | |
UEsDBA | 50 4b 03 04(PK) | ZIP,以及 DOCX、XLSX、JAR、APK |
H4sI | 1f 8b 08 | gzip |
如果开头的字节与这些都不匹配,它们仍可能是某种意料之外字符集的文本,或者是加密数据,加密数据在 hex 中看起来是均匀随机的。常见 Base64 前缀列表 收录了更多签名。如果数据原来是你想打开的文件,Base64 转文件 可以预览并保存它。
对比摘要和校验和
hex 是校验和工具输出的格式,所以要把请求头或配置文件中的值与你自己的 md5sum 或 sha256sum 结果对比,就得把 Base64 转成 hex:
| 出现的位置 | Base64 | Hex |
|---|---|---|
hello 的 Content-MD5 请求头 | XUFAKrxLKna5cZ2REBfFkg== | 5d41402abc4b2a76b9719d911017c592 |
hello 的 SHA-256 | LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
integrity="sha384-…" 属性、SHA256: 形式的 SSH 指纹(不带填充的 Base64)以及 JSON 中的二进制密钥也是如此。如果两个值的 hex 不同,它们的字节就不同;如果 hex 一致,Base64 上的差异就只是格式上的,比如填充或 URL 安全字母表。
在代码中将 Base64 转为 Hex
import base64
base64.b64decode("SGkh/w==").hex() # '486921ff'
base64.b64decode("SGkh/w==").hex(" ") # '48 69 21 ff'
Buffer.from("SGkh/w==", "base64").toString("hex"); // '486921ff'
在 Python 中,除非传入 validate=True,b64decode 会悄悄丢弃字母表以外的字符,所以 URL 安全的字符串可能被解码成错误的字节而不报错。Node 的 "base64" 解码器两种字母表都接受。详情见 Python 和 Node.js 页面。
常见问题
在 Linux 上怎么把 Base64 解码为 hex?
echo 'SGkh/w==' | base64 -d | xxd -p 会输出 486921ff。xxd -p 每 30 字节换一行;加上 -c 32 可以每行 32 字节,没有安装 xxd 时可以用 od -An -tx1。
为什么我的 hex 里有 ef bf bd?
这三个字节是替换字符 � 的 UTF-8 形式。某个工具先把 Base64 解码成了文本,并替换掉了所有不是有效 UTF-8 的字节。像本页这样直接解码为 hex,就能得到原始字节。
hex 比 Base64 长多少?
大约是 1.5 倍。四个 Base64 字符包含三个字节,需要六个 hex 数字表示。44 个字符的 SHA-256 值会变成 64 个 hex 数字。
支持 Base64URL 和 data URI 吗?
支持。- 和 _ 会按 + 和 / 读取,缺失填充也没关系,data:...;base64, 前缀会被跳过。