上传文件
  1. base64hub
  2. 密钥与哈希
  3. SHA-256 哈希(Base64)

SHA-256 转 Base64

输入文本或拖入文件,即可同时得到 SHA-256 摘要的 Base64(44 个字符)、Base64URL 和 hex 形式。每种形式都是同样的 32 个字节,选你的系统需要的那种即可。

免费 无需注册,不限次数 本地 不上传任何内容 文件 超过 200 MB 时流式计算 SHA-256 更新于 2026年10月27日

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

如何得到 Base64 格式的 SHA-256 哈希

  1. 算法 下已选中 SHA-256;其他按钮可切换为 MD5、SHA-1、SHA-384 或 SHA-512。
  2. 输入 设为 文本 时,在 文本 框中输入或粘贴内容。输入格式 决定如何读取这段文本:作为 UTF-8 文本,或者在你想对已编码的二进制数据计算哈希时,作为 hex 或 Base64 字节。
  3. 以 Hex、Base64 或 Base64URL 形式复制结果。所有算法 会列出同一输入的所有摘要。
  4. 要计算文件的哈希,把 输入 切换为 文件,拖入一个或多个文件。每个文件都有单独的结果。超过 200 MB 时,SHA-256 和 MD5 会按 8 MB 分块计算并显示进度,大文件永远不需要一次性全部载入内存。

哈希会随输入实时更新。顶部的 HMAC 和 SRI 可以切换到带密钥的哈希和子资源完整性(Subresource Integrity)标签。

哈希示例

输入SHA-256(hex)SHA-256(Base64)
空字符串e3b0c442…7852b85547DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
hello2cf24dba…938b9824LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=
hello + 换行符5891b5b5…46f6be03WJG1tSLV3whtD/CxEPvZ0hu0/HFjrzTQgoai6Eb2vgM=
The quick brown fox jumps over the lazy dogd7a8fbb3…37c9e59216j7swfXgJRpypq8sAguT41WUeRtPNt2LQLQvzfJ5ZI=

第二行和第三行就是大多数哈希不一致背后的陷阱:一个看不见的换行符就会得到完全不同的哈希。粘贴到浏览器文本框中的文本,换行也会被转换为 LF,所以对于使用 CRLF 换行的文件,请直接拖入文件本身,不要粘贴它的内容。

哪些地方会用到 Base64 格式的 SHA-256

打印摘要的传统方式是 hex,但很多格式因为更短而使用 Base64:

  • 内容安全策略(CSP)哈希,用于内联脚本:script-src 'sha256-…'。
  • 子资源完整性(SRI):integrity="sha256-…",不过那里更常用的是 SHA-384。
  • HTTP Content-Digest(RFC 9530):对于正文 {"hello": "world"},是 Content-Digest: sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:。冒号在结构化请求头中表示二进制值。
  • 云存储校验和,比如 Amazon S3 的 x-amz-checksum-sha256 请求头,携带的就是 Base64 摘要。
  • 锁文件和包管理器:package-lock.json 中的 integrity 字段(通常是 sha512-…),以及 Nix 中 SRI 风格的哈希。

Docker 和 OCI 镜像摘要(sha256:…)以及 Git 使用 hex。需要跨系统比较时,用 Hex 转 Base64 或 Base64 转 Hex 转换即可,不必重新计算哈希。

在代码和命令行中输出 SHA-256 Base64

printf 'hello' | openssl dgst -sha256 -binary | base64
sha256sum file.bin | cut -d' ' -f1 | xxd -r -p | base64

不加 -binary 时,OpenSSL 会输出 hex 文本,而对这段文本做 Base64 会得到 88 个毫无意义的字符。

import base64, hashlib

digest = hashlib.sha256(b"hello").digest()
print(base64.b64encode(digest).decode())

在 Node.js 中,crypto.createHash("sha256").update("hello").digest("base64") 返回同样的 LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=,改用 "base64url" 则得到 URL 安全形式。普通哈希不是签名:任何人都能重新算出来。要证明消息来自持有密钥的人,请使用 HMAC。更多内容见 Python 中的 Base64 和 OpenSSL。

常见问题

为什么我的 SHA-256 和命令行算出来的不一样?

几乎都是末尾换行符的问题。echo hello 输出 6 个字节,即 hello 加 \n,所以它的哈希与 hello 的哈希不同。在 shell 中请用 printf 'hello' 或 echo -n hello,或者直接把文件拖到这里比较。

SHA-256 哈希的 Base64 有多长?

44 个字符,以一个 = 结尾;不带填充的 Base64URL 是 43 个字符。hex 形式是 64 个字符。如果你得到的是 88 个字符,说明被 Base64 编码的是 hex 文本,而不是原始摘要。

能把 SHA-256 的 hex 字符串转成 Base64 吗?

可以,摘要的字节是一样的。把 64 个 hex 字符粘贴到 Hex 转 Base64,或者在 shell 中对 hex 运行 xxd -r -p,再通过管道传给 base64。

SHA-256 能解密回原文吗?

不能。哈希是单向的指纹,没有什么可以解码的。解码 Base64 只能得到那 32 个摘要字节;它和编码有什么区别,见 Base64 不是加密。