上传文件
  1. base64hub
  2. 其他进制编码
  3. Hex 转 Base64

Hex 转 Base64:适用于哈希值和密钥

粘贴 hex 字节,得到同样字节的 Base64。64 位十六进制的 SHA-256 摘要会变成 44 个 Base64 字符,因为 hex 会先被解码成字节,而不是当作文本编码。

免费 无需注册,不限次数 本地 不上传任何内容 44 个字符表示 SHA-256 摘要,而不是 88 个 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把 hex 转为 Base64

  1. 把 hex 粘贴到 输入 · Hex。空格、换行、冒号、短横线以及 0x 或 \x 前缀都会被跳过,大小写无所谓。
  2. Base64 会随输入实时出现在 输出 · Base64 中。
  3. 在输出下方,如果接收方需要不带填充的 Base64,取消勾选 填充(=);需要换行输出时,把 换行 设为 64(PEM)或 76(MIME)。
  4. 按 复制输出,或用 Base64 → Hex 切换反向检查结果。Base64 转 Hex 就是同一个工具的反方向。

哈希摘要:hex 与 Base64

哈希函数返回的是原始字节。sha256sum、md5sum 等命令行工具把这些字节打印为 hex,而很多协议需要的是同一个摘要的 Base64 形式。下面是 5 个字节 hello 的摘要:

哈希Hex(来自 sha256sum 等)Base64
MD55d41402abc4b2a76b9719d911017c592XUFAKrxLKna5cZ2REBfFkg==
SHA-1aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434dqvTGHdzF6KLavt4PO0gs2a6pQ00=
SHA-2562cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=

需要 Base64 形式的场合:

  • 子资源完整性(SRI)。 <script> 或 <link> 标签上的 integrity="sha384-…" 存放的是 Base64 摘要。SRI 哈希生成器 可以根据文件生成整个属性。
  • Content-MD5 请求头。 RFC 1864 规定其值为 16 字节 MD5 摘要的 Base64,用它校验上传的对象存储会拒绝 hex 形式。参见 Base64 形式的 MD5。
  • API 请求中的签名和 HMAC,通常以 Base64 发送。Base64 形式的 HMAC 可以按两种形式计算。
  • 密钥和机密:openssl rand -hex 32 打印的 32 字节密钥,会变成很多配置文件需要的 44 字符 Base64 值。

要计算你自己的文本或文件的 SHA-256,Base64 形式的 SHA-256 可以完全跳过 hex 这一步。

常见错误:把 hex 文本拿去编码

echo -n 2cf24d…9824 | base64 给出的结果看似合理,实则是错的。它编码的是 hex 的 64 个 ASCII 字符,而不是它们所代表的 32 个字节,结果是以 MmNmMjRk 开头的 88 个字符。这个值解码后又回到 hex 文本,所以在签名或完整性校验失败之前,不会有任何报错。请先解码 hex:

echo -n 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 | xxd -r -p | base64
# LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=

printf hello | openssl dgst -sha256 -binary | base64
# same result, without going through hex at all

xxd -r -p 把纯 hex 还原为字节。它随 Vim 一起提供;在精简系统上请安装 xxd 包。使用 OpenSSL 时,正是 -binary 让摘要以字节而不是 hex 输出。

在代码中把 hex 转为 Base64

import base64
base64.b64encode(bytes.fromhex("5d41402abc4b2a76b9719d911017c592")).decode()
# 'XUFAKrxLKna5cZ2REBfFkg=='
Buffer.from("5d41402abc4b2a76b9719d911017c592", "hex").toString("base64");
// 'XUFAKrxLKna5cZ2REBfFkg=='

Python 和 Node.js 页面介绍了 URL 安全和不填充的变体。如果摘要要放进 URL 或 JWT,请用 Base64 转 Base64URL 转换结果。

转换失败时

  • “十六进制数字个数为奇数”。 每个字节需要两位数字,复制时丢了一位。检查输入的开头和结尾。
  • “出现意外字符”。 输入中有不是 hex 的内容,例如 sha256: 标签,或 sha256sum 在摘要后面打印的文件名。把它删掉;显示 会跳到出错的位置。
  • hex 转储中的偏移量。 在 00000010: 4865 6c6c 中,00000010 是位置而不是数据,但它是有效的 hex,会被一起转换。请使用不带偏移量的 xxd -p 输出。

常见问题

怎样把 SHA-256 的十六进制哈希转为 Base64?

把 64 位十六进制数字粘贴到输入框。结果是以 = 结尾的 44 个字符,例如 2cf24dba…9824 会变成 LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=。命令行中:echo -n HEX | xxd -r -p | base64。

为什么我的 Base64 比预期长一倍?

hex 字符串被当成文本编码了,每个十六进制数字都变成了一个字节。这样处理 SHA-256 摘要会得到 88 个字符,而不是 44 个。应该先把 hex 解码成字节,这正是本转换器的做法。

一个 hex 字符串会得到多少个 Base64 字符?

两位十六进制数字是一个字节,每 3 个字节变成 4 个 Base64 字符,并向上取整到 4 的倍数。32 位 hex(MD5)得到 24 个字符,40 位(SHA-1)得到 28 个,64 位(SHA-256)得到 44 个,128 位(SHA-512)得到 88 个。

可以把 UUID 转为 Base64 吗?

可以,连同短横线一起粘贴即可。123e4567-e89b-12d3-a456-426614174000 的 16 个字节会变成 Ej5FZ+ibEtOkVkJmFBdAAA==,只有 24 个字符,而不是 36 个。