Skip to content

SHA-384 哈希生成器(TLS Suite B 哈希)

在线生成 SHA-384 哈希值——96 字符十六进制输出,免疫长度扩展攻击,符合 NSA Suite B 标准。与 AES-256-GCM 配对用于 TLS。所有哈希通过 Web Crypto API 在浏览器中运行。

无追踪 浏览器中运行 免费
所有哈希计算均在浏览器本地完成,不会向任何服务器传输数据。
算法
已根据 NIST FIPS 180-4 测试向量审核 SHA-384 正确性;Suite B 措辞已对照 CNSSP-15 和 CNSA Suite 文档验证 — Go Tools 工程团队 · 2026年5月28日

什么是 SHA-384?

SHA-384 是 SHA-2 家族中的 384 位密码哈希函数,NIST 于 2001 年以 FIPS 180-2 的一部分发布。从架构上看,它是 SHA-512 的截断变体:两种算法使用相同的 64 位字运算、80 个压缩轮次和 1024 位输入块——唯一的差异是初始化向量(IV)以及 SHA-384 丢弃 SHA-512 的 512 位输出中最后 128 位,产生 384 位(96 个十六进制字符)。

为什么截断在密码学上很重要:SHA-256 对长度扩展攻击存在漏洞——给定 SHA-256(message),攻击者可以在不知道原始消息的情况下计算 SHA-256(message || padding || extension),方法是从泄露的内部状态恢复哈希计算。SHA-384 消除了这一攻击面:截断丢弃了 128 位内部状态,因此公开的 384 位哈希不携带足够的信息来恢复 SHA-512 的计算。这使得原始 SHA-384(无需 HMAC 包装)在哈希输出可能暴露给对手的构造中是安全的。

NSA Suite B 和 TLS 角色:SHA-384 由 NSA Suite B(CNSSP-15,2005 年)规定用于绝密级别。它是密码套件 ECDHE-ECDSA-AES256-GCM-SHA384 中的哈希算法,该密码套件是 Suite B 合规系统的标准 TLS 1.2 密码套件,至今仍广泛部署在美国政府、金融和国防网络中。NSA 的 CNSA Suite(2015 年)保留了 SHA-384 和 SHA-256,SHA-384 也出现在 TLS 1.3 的签名算法列表中(ecdsa_secp384r1_sha384)。

性能:在 64 位硬件上,SHA-384 和 SHA-512 运行速度完全相同——两者均只使用 64 位字运算。对于相同的输入,它们通常比 SHA-256(使用 32 位字运算,需要更多遍数)在现代 x86-64 和 ARM64 处理器上更快。

本工具完全在你的浏览器中通过 Web Crypto API 的 crypto.subtle.digest('SHA-384', ...) 计算 SHA-384。输出与 sha384sumopenssl dgst -sha384 或 Python 的 hashlib.sha384() 的结果逐位相同。

何时使用 SHA-384:要求 Suite B 合规的 TLS 密码套件、TLS 1.2 PRF 的 HMAC-SHA-384、HKDF-SHA-384 密钥派生、机密文档指纹,以及任何需要不使用 HMAC 包装即具备长度扩展免疫性的场景。何时不使用 SHA-384:通用校验和和日常完整性用途——SHA-256 是这些场景的标准选择,具有更简单的库支持和通用工具兼容性。

// Hash text using Web Crypto API (SHA-384)
async function sha384(text) {
  const data = new TextEncoder().encode(text);
  const hash = await crypto.subtle.digest('SHA-384', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

await sha384('Hello, World!');
// → '5485cc9b3365b4305dfb4e8337e0a598a574f8242bf17289e0dd6c20a3cd44a089de16ab4ab308f63e44b1170eb5f515'

SHA-384 示例

TLS 密码套件握手指纹

ECDHE-ECDSA-AES256-GCM-SHA384

密码套件名称 ECDHE-ECDSA-AES256-GCM-SHA384 是用于绝密级 TLS 会话的标准 Suite B 密码套件。名称末尾的 SHA-384 指 TLS 1.2 握手中用于派生会话密钥的伪随机函数(PRF)。将此字符串粘贴到此处即可生成密码套件名称本身的 SHA-384 哈希——这是跨环境验证 SHA-384 实现一致性的快捷方式。在真实的 TLS 会话中,证书链、预主密钥和握手记录均通过 HMAC-SHA-384 作为 TLS 1.2 PRF 的一部分进行处理。

HKDF-SHA-384 密钥派生(TLS 1.2 PRF)

master secret || client random || server random

TLS 1.2 的 PRF(RFC 5246 定义)对使用 SHA-384 协商的密码套件使用 HMAC-SHA-384。主密钥由预主密钥通过 P_SHA384(pre_master_secret, 'master secret' || ClientHello.random || ServerHello.random) 派生。HKDF-SHA-384(RFC 5869)将此模式扩展用于通用密钥派生,也用于 TLS 1.3 的密钥调度以及 IKEv2(IPsec)。在此粘贴任何种子材料即可生成在应用 HMAC 之前的 SHA-384 指纹——调试密钥派生管道的第一步。

NSA Suite B 机密文档指纹

CLASSIFIED//TS//SI//NF — Document ID: TSC-2026-0001

NSA 的 Suite B 密码体系(CNSSP-15,已被 2018 年的 CNSA Suite 取代)规定对绝密文档完整性使用 SHA-384。情报界系统以 SHA-384 对机密文档进行指纹提取以检测篡改。生成的 96 字符十六进制字符串与 AES-256-GCM 加密有效载荷一起存储在文档清单中。在此粘贴任意文档头部或 ID 字符串即可生成 SHA-384 指纹——适用于审计遗留 Suite B 合规档案,或验证正在向 CNSA 过渡的系统仍能产生正确的 SHA-384 输出。

HMAC-SHA-384 消息认证

POST /api/v2/transfer
Content-Type: application/json
{"amount":10000,"to":"account-XYZ"}

HMAC-SHA-384 用于高保证 API 对请求体进行认证。服务器计算 HMAC-SHA-384(secret_key, canonical_request) 并将十六进制摘要包含在 Authorization 头中;客户端重现计算并进行比对。由于 SHA-384 即使在原始(非 HMAC)形式下也对长度扩展免疫,它在某些场景下比 HMAC-SHA-256 提供额外的安全裕度——例如分布式日志系统或签名 URL 方案中原始哈希可能被暴露的情况。在此粘贴请求体即可在添加 HMAC 密钥前检查 SHA-384 哈希值。

如何生成 SHA-384 哈希值

  1. 1

    粘贴文本或拖入文件

    选择「文本」选项卡,将任意字符串——文档 ID、请求体或任意输入——粘贴到输入区域。SHA-384 哈希值会随输入实时更新。对于文件,切换到「文件」选项卡,将任意文件拖入拖放区;浏览器使用 Web Crypto API 在本地对其进行哈希,不会上传。大文件(>10 MB)会显示进度指示器。

  2. 2

    复制 96 字符哈希值

    点击哈希输出旁的「复制」按钮。完整的 96 字符小写十六进制字符串将复制到剪贴板——可直接粘贴到 TLS 配置、合规报告或 HMAC 实现中。如果目标系统需要大写十六进制,可使用「大写」切换。

  3. 3

    与已知哈希值进行比对

    切换到「对比」选项卡,并排粘贴两个 SHA-384 哈希值。工具使用恒定时间比较报告匹配或不匹配,不会泄漏时序信息。适用于验证 Suite B 合规性哈希值、比较跨实现的 HKDF-SHA-384 派生密钥,或核查机密档案审计中的文档指纹。

技术细节

算法:SHA-512 使用不同 IV,输出截断为 384 位
SHA-384 在结构上与 SHA-512 完全相同(FIPS 180-4 第 6.5 节)。两者均使用 80 轮 64 位运算(Ch、Maj、Σ0、Σ1 函数),常数由前 80 个素数的立方根和平方根派生。初始化向量(八个 64 位字)与 SHA-512 的 IV 不同——SHA-384 的 IV 由第 9 到第 16 个素数平方根的小数部分派生。处理后,八字状态中的前六个 64 位字(384 位)作为输出;最后两个字被丢弃。
输出:384 位,96 个十六进制字符
始终恰好为 96 个小写十六进制字符(384 位 = 48 字节,每字节编码为 2 个十六进制字符)。无论输入大小,输出长度固定。96 字符长度是区分 SHA-384(64 字符的 SHA-256 和 128 字符的 SHA-512)的即时标志。被丢弃的 128 位——最后两个 64 位状态字——正是 SHA-384 对长度扩展免疫的原因。
性能:在 64 位硬件上与 SHA-512 相同
SHA-384 和 SHA-512 在 64 位 CPU 上执行相同的指令序列。两者均使用 1024 位(128 字节)输入块,以 64 位旋转和加法处理。吞吐量通常在浏览器中使用 Web Crypto API(在 JS 虚拟机外调用原生 C/Rust 代码)达到 500–900 MB/s,在有硬件 SHA 扩展的原生工具中达到 1–3 GB/s。在 32 位硬件上或无硬件加速时,由于 64 位整数模拟,SHA-384/512 比 SHA-256 更慢。
标准:FIPS 180-4,NSA Suite B 历史遗留,CNSA 当前标准
在 FIPS 180-2(2001 年)中标准化,当前版本为 FIPS 180-4(2015 年)。NSA Suite B(CNSSP-15,2005 年)要求绝密级使用,CNSA Suite(2015 年)中仍然存在。在 RFC 5246(TLS 1.2 PRF 与 SHA-384 密码套件)、RFC 8446(TLS 1.3 签名算法 ecdsa_secp384r1_sha384)和 RFC 5869(HKDF)中有规定。根据 NIST SP 800-131A Rev 2,NIST 批准在 2030 年及以后的所有安全强度级别使用。

最佳实践

在需要不使用 HMAC 的长度扩展免疫性时使用 SHA-384
如果你的协议暴露原始哈希输出,且攻击者可能尝试扩展消息(例如某些签名 URL 或挑战响应方案),SHA-384 提供 SHA-256 所没有的内在长度扩展免疫性。对于所有其他带密钥的用途,无论底层哈希如何,均应使用 HMAC——HMAC-SHA-256 和 HMAC-SHA-384 都是安全的,HMAC 消除了任何 SHA-2 变体的长度扩展攻击。
与 AES-256-GCM 配对以符合 Suite B / CNSA 合规性
如果你正在构建必须符合 NSA Suite B 或 CNSA 要求的系统,标准配置是 AES-256-GCM 用于批量加密,SHA-384 用于完整性和密钥派生。TLS 1.2 配合 ECDHE-ECDSA-AES256-GCM-SHA384 是参考密码套件。TLS 1.3 的等效项是 TLS_AES_256_GCM_SHA384 配合 ecdsa_secp384r1_sha384 作为签名算法。确认你的 TLS 库实际协商了这些密码套件——某些默认配置即使在 Suite B 配置的系统上也会优先选择 AES-128 变体。
在 TLS 1.2 PRF 场景中使用 HMAC-SHA-384 作为带密钥 MAC
TLS 1.2 的 PRF 对协商了 SHA-384 的密码套件使用 HMAC-SHA-384(RFC 5246 第 5 节)。如果你正在实现或测试 TLS 1.2 PRF:PRF(secret, label, seed) = P_SHA384(secret, label + seed)。不要在 SHA-384 密码套件上下文中用 HMAC-SHA-256 替换——密码套件协商决定 PRF 哈希,不匹配会导致握手失败。使用 RFC 5705(密钥材料导出器)或 RFC 6070(PBKDF2)的测试向量进行验证。
在代码中验证 SHA-384 哈希值时使用恒定时间比较
如果你在代码中比较两个 SHA-384 哈希值——验证文档指纹、核查 MAC——请使用恒定时间等值检查:Node.js 的 crypto.timingSafeEqual()、Python 的 hmac.compare_digest()、Go 的 subtle.ConstantTimeCompare()。简单的字符串等值比较(=== 或 ==)会泄漏时序信息,允许攻击者通过约 768 次比较(96 字符 × 8 位)逐字节重建预期哈希值。这是任何认证系统的关键纵深防御措施。

SHA-384 常见问题

为什么使用 SHA-384 而非 SHA-256?
两个原因:长度扩展免疫性和 Suite B 合规性。SHA-384 对长度扩展攻击免疫,因为将 SHA-512 的 512 位状态截断为 384 位丢弃了 128 位内部状态——知道 SHA-384(message) 的攻击者无法在不知道完整消息的情况下计算 SHA-384(message || extension)。SHA-256 则对长度扩展攻击存在漏洞,这正是 SHA-256 带密钥使用时需要 HMAC 构造的原因。此外,SHA-384 是 NSA Suite B 绝密级别的必要算法,在 TLS 密码套件(ECDHE-ECDSA-AES256-GCM-SHA384)和向 CNSA Suite 过渡的政府系统中仍然普遍存在。
SHA-384 与 SHA-512 一样安全吗?
是的,就碰撞阻力而言。SHA-384 提供 192 位碰撞阻力(384 位的一半),而 SHA-512 提供 256 位——两者都远超任何可预见的攻击。SHA-384 在实践中提供与 SHA-512 相同的第二原像阻力。唯一有意义的差异是输出长度:96 个十六进制字符对比 128 个。如果你需要为极长寿命的档案(超过 50 年)提供最大碰撞阻力,SHA-512 提供更大的裕度——但对于任何当前系统,SHA-384 完全足够。
SHA-384 与 SHA-512 速度相同吗?
是的——它们实际上是同一种算法。SHA-384 就是 SHA-512 使用不同初始化向量(IV)并将输出截断到前 384 位。由于两者在整个过程中都使用 64 位字运算,在 64 位硬件上运行速度完全相同。反直觉的是,SHA-384 和 SHA-512 在 64 位机器上通常都比 SHA-256 更快——SHA-256 使用 32 位字运算并处理 512 位块,而 SHA-512 以更少的遍数处理 1024 位块。浏览器中的典型吞吐量:500–900 MB/s,与原生工具相当。
HMAC-SHA-384 何时优于 HMAC-SHA-256?
在使用 SHA-384 密码套件协商的 TLS 1.2 握手中,PRF 必须是 HMAC-SHA-384——这是硬性协议要求,而非选择。在 TLS 之外,以下情况优先选择 HMAC-SHA-384:(1) 需要符合 Suite B / CNSA 标准,(2) 系统处理高于机密级别的数据,或 (3) 希望针对未来 128 位安全性方面的进展获得额外裕度。对于上述情况均不适用的通用 MAC,HMAC-SHA-256 是标准选择,在各种库中经过充分测试。
SHA-384 适合用于通用哈希吗?
除非有特定原因,否则不建议。SHA-256 是文件完整性、校验和、Git 对象、JWT 签名和证书指纹的行业默认标准——它得到普遍支持,提供 128 位碰撞阻力,对任何实际用途都足够。SHA-384 在以下情况有意义:(1) 需要不使用 HMAC 包装的长度扩展免疫性,(2) Suite B / CNSA 合规要求,或 (3) 与要求 SHA-384 的 TLS 密码套件互操作。其他情况下,SHA-256 更简单且同样安全。
什么是 NSA Suite B?它是否仍在使用?
NSA Suite B 是 NSA 于 2005 年发布(CNSSP-15)的一套批准用于保护美国机密信息的密码算法。Suite B 规定机密级使用 SHA-256,绝密级使用 SHA-384。2015 年 NSA 宣布从 Suite B 向商业国家安全算法套件(CNSA)过渡,原因是后量子密码学方面的顾虑——Suite B 的椭圆曲线算法(P-256、P-384)最终可能被足够大的量子计算机破解。然而,SHA-384 与 SHA-256 一起被保留在 CNSA 中。许多为符合 Suite B 合规要求而构建的政府和国防系统仍使用 SHA-384,最初由 Suite B 要求的 TLS 密码套件(如 ECDHE-ECDSA-AES256-GCM-SHA384)在政府网络中仍被广泛部署。
SHA-384 哈希有多长?
始终恰好为 96 个十六进制字符——384 位分为 48 字节,每字节编码为 2 个十六进制字符。无论输入大小,输出长度固定;1 字节消息和 10 GB 文件均产生 96 个十六进制字符。对比:SHA-256 产生 64 个字符,SHA-512 产生 128 个字符,MD5 产生 32 个字符。96 字符输出是 SHA-384 产生的哈希值的即时识别标志。
使用本工具时数据会被发送到服务器吗?
不会。SHA-384 完全在你的浏览器中使用 Web Crypto API(crypto.subtle.digest('SHA-384', data))计算。在哈希过程中打开开发者工具 → 网络选项卡——你会看到零外发请求。你拖入的文件通过 FileReader API 在本地读取和哈希;字节数据不会离开你的设备。这使本工具可安全地用于哈希机密文档指纹、TLS 私钥材料或任何其他敏感输入。同样的隐私保证适用于 SHA-256 生成器SHA-512 生成器

JWT 解码器 · 在线解码工具

安全工具

免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。

在线 MD5 哈希生成器与文件校验工具

安全工具

在线生成 MD5、SHA-256、SHA-1、SHA-512 哈希值 — 完全免费,浏览器本地运算,无需注册。支持文本和文件哈希、校验和验证、哈希值对比,一键复制,数据绝不离开你的设备。

随机密码生成器 — 自定义长度、强度与安全性

安全工具

免费在线随机密码生成器,一键生成高强度安全密码。支持自定义长度、字符类型,批量生成多个密码。所有密码仅在浏览器本地生成,不上传不存储。

SHA-1 哈希生成器(160 位遗留算法)

安全工具

在浏览器中生成 SHA-1 哈希值 — 40 字符十六进制输出,无需上传。适用于 Git 指纹查询、旧证书核验和迁移审计的遗留工具。数据绝不离开你的设备。

SHA-256 哈希生成器与校验和工具

安全工具

免费在线生成 SHA-256 哈希值。在浏览器中对文本或文件进行哈希、验证校验和,复制 64 字符十六进制输出。无需注册,数据不离开页面。

SHA-3 哈希生成器(Keccak SHA3-256)

安全工具

免费在线生成 SHA-3 哈希值。NIST FIPS 202 海绵构造——SHA-2 后的新一代标准。SHA3-256 输出 64 个十六进制字符。纯浏览器运行,通过懒加载 js-sha3 实现,零上传。