SHA-384 哈希生成器

从任意文本生成SHA-384哈希值

输入文本

本地运行 · 粘贴密钥安全无忧

SHA-384哈希值

SHA-384哈希值将显示在此处…

什么是SHA-384哈希?

SHA-384是一种密码学哈希函数,由NIST在FIPS 180-4中定义,属于SHA-2家族。它接受任意长度的输入,生成固定384位(48字节)的消息摘要,通常以96个十六进制字符的形式呈现。SHA-384广泛应用于TLS密码套件、数字证书签名,以及需要比SHA-256提供更高碰撞抵抗余量的政府系统。

从内部实现来看,SHA-384是SHA-512的截断变体。它与SHA-512使用相同的1024位块大小、80轮压缩和64位字运算,但以一组不同的初始哈希值(来源于第9至第16个质数)开始,并且只输出最终状态的前384位。这种截断意味着,尽管SHA-384与SHA-512共享相同的核心算法,但对于相同的输入,两者会生成不同的摘要。

由于SHA-384以64位字为单位运算,它在现代64位处理器上的运行速度比SHA-256更快,同时生成更大的摘要。这使其成为实用的中间选择:比SHA-256更强(192位碰撞抵抗 vs. 128位),同时避免了SHA-512的128字符十六进制输出带来的存储开销。SHA-384是TLS 1.3证书验证签名的默认哈希算法,并被NSA Suite B(现更名为CNSA)要求用于绝密级别数据。

为什么使用在线SHA-384生成器?

生成SHA-384哈希通常需要终端命令或编写代码。这个基于浏览器的工具让你无需安装任何软件或向服务器发送数据,即可即时计算SHA-384摘要。无论你需要为CDN资源生成SRI哈希、验证文件校验和,还是对比相同输入下SHA-384与SHA-256的输出结果,此工具都能让你在任何现代浏览器中以无依赖的方式处理SHA-384摘要。

浏览器即时计算
粘贴文本,立即获得96字符的SHA-384哈希值。Web Crypto API在浏览器中原生处理计算,无需任何外部依赖。
🔒
隐私优先的哈希处理
你的输入永远不会离开你的设备。所有哈希计算均通过Web Crypto API在本地运行,不发送服务器请求,不记录日志,不保留数据。
📋
可直接复制的输出格式
一键切换小写和大写十六进制输出。将哈希值复制到剪贴板,用于校验和文件、配置项或文档。
🔍
无需账号或安装
支持所有主流浏览器——Chrome、Firefox、Safari、Edge。无需注册、无需扩展程序、无需配置命令行工具。

SHA-384哈希生成器使用场景

TLS证书验证
TLS 1.2和1.3在证书签名验证及PRF(伪随机函数)中使用SHA-384。在安全审计过程中,计算SHA-384摘要以验证证书指纹是否与预期值匹配。
子资源完整性(SRI)
为从CDN加载的JavaScript和CSS文件生成SHA-384哈希值。script和link标签中的integrity属性在大多数SRI生成器中默认使用Base64编码的SHA-384。
政府与合规系统
CNSA(前身为NSA Suite B)要求使用SHA-384保护机密信息。在需要FIPS 180-4算法的合规工作流中,生成哈希值以验证文档完整性。
文件完整性校验
为固件镜像、软件发行包或配置文件计算SHA-384校验和。比对传输前后的哈希值,以检测数据损坏或篡改。
HMAC-SHA384密钥派生
SHA-384与HMAC配合,在IPsec和TLS等协议中用于消息认证。在调试HMAC-SHA384实现时,使用此工具验证预期的哈希输出。
密码学学术练习
学习SHA-2家族的学生可以对相同的输入比较SHA-384与SHA-256、SHA-512的输出,观察不同初始向量和截断方式如何产生各不相同的摘要。

SHA-2家族变体对比

SHA-384与其他多个变体同属SHA-2家族。下表展示了它们在摘要大小、输出长度和典型应用场景上的差异。

变体摘要长度十六进制长度字节大小适用场景
SHA-384384 bits96 hex chars48 bytesTLS 1.2/1.3, government/CNSA, certificate signatures
SHA-256256 bits64 hex chars32 bytesTLS, blockchain, code signing, JWTs, SRI
SHA-512512 bits128 hex chars64 bytesDigital signatures, HMAC with large keys
SHA-224224 bits56 hex chars28 bytesTruncated SHA-256 — rare, specific compliance
SHA-512/256256 bits64 hex chars32 bytesSHA-512 speed on 64-bit CPUs, 256-bit output

SHA-384 与 SHA-256、SHA-512、SHA-3-384 对比

在SHA-384与其他哈希算法之间做出选择,取决于你的安全需求、平台限制和性能要求。以下对比涵盖了最关键的属性。

属性SHA-384SHA-256SHA-512SHA-3-384
Digest size384 bits (96 hex)256 bits (64 hex)512 bits (128 hex)384 bits (96 hex)
Internal state512 bits (8x64-bit)256 bits (8x32-bit)512 bits (8x64-bit)1600 bits (sponge)
Block size1024 bits512 bits1024 bits832 bits
Rounds80648024
Word size64 bits32 bits64 bitsN/A (sponge)
Length extensionResistantVulnerableVulnerableResistant
64-bit performanceFast (native ops)Slower (32-bit ops)Fast (native ops)Moderate
StandardFIPS 180-4FIPS 180-4FIPS 180-4FIPS 202
Web Crypto APIYesYesYesNo

SHA-384的内部工作原理

SHA-384通过与SHA-512相同的Merkle–Damgård构造处理输入。输入被填充为1024位的整数倍,然后分割成块,每个块经过80轮使用Ch、Maj和两个Sigma函数的64位字混合运算。与SHA-512的关键区别在于初始哈希值:SHA-384使用来源于第9至第16个质数平方根小数部分的值,而SHA-512使用前8个质数。在所有块处理完成后,SHA-384将512位内部状态截断为前384位。

Input: "hello world"
SHA-384: fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
(384 bits = 48 bytes = 96 hex characters)

截断和不同的初始化方式意味着SHA-384和SHA-512对相同的输入始终会生成不同的摘要。这也使SHA-384天然具备对长度扩展攻击的抵抗能力,而SHA-256和SHA-512则存在此类漏洞——攻击者可以在不知道原始消息的情况下追加数据并计算出有效哈希。

SHA-384代码示例

SHA-384在所有主流语言和运行时中均原生支持。以下是可直接复制到项目中使用的完整示例。

JavaScript (Web Crypto API)
// Works in all modern browsers and Node.js 18+
async function sha384(text) {
  const data = new TextEncoder().encode(text)
  const hashBuffer = await crypto.subtle.digest('SHA-384', data)
  const hashArray = Array.from(new Uint8Array(hashBuffer))
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}

await sha384('hello world')
// → "fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha384').update('hello world').digest('hex')
// → "fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd"
Python
import hashlib

# Basic SHA-384 hash
result = hashlib.sha384(b'hello world').hexdigest()
print(result)
# → "fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd"

# Hash a string with Unicode characters
text = 'café ☕'
hashlib.sha384(text.encode('utf-8')).hexdigest()
# → 96-character hex string

# Hash a file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
    sha = hashlib.sha384()
    for chunk in iter(lambda: f.read(8192), b''):
        sha.update(chunk)
    print(sha.hexdigest())
Go
package main

import (
    "crypto/sha512"
    "fmt"
)

func main() {
    data := []byte("hello world")
    // SHA-384 lives in the crypto/sha512 package
    hash := sha512.Sum384(data)
    fmt.Printf("%x\n", hash)
    // → fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
}
CLI (Linux / macOS)
# Using sha384sum (Linux)
echo -n "hello world" | sha384sum
# → fdbd8e75a67f29f701a4e040385e2e23...  -

# macOS
echo -n "hello world" | shasum -a 384
# → fdbd8e75a67f29f701a4e040385e2e23...  -

# Using openssl (cross-platform)
echo -n "hello world" | openssl dgst -sha384
# → SHA2-384(stdin)= fdbd8e75a67f29f701a4e040385e2e23986303ea...

# Verify a file checksum
sha384sum myfile.bin > checksum.txt
sha384sum -c checksum.txt
# → myfile.bin: OK

常见问题

SHA-384和SHA-512有什么区别?
SHA-384和SHA-512使用相同的压缩函数、块大小(1024位)和轮数(80轮)。两者的区别体现在两点:SHA-384以不同的初始哈希值(来源于第9至16个质数,而非第1至8个)开始计算,并且只输出512位内部状态的前384位。这意味着对于相同的输入,两者始终会生成不同的摘要。
SHA-384比SHA-256更安全吗?
根据生日攻击界(摘要长度的一半),SHA-384提供192位碰撞抵抗,而SHA-256为128位。对于原像抵抗,SHA-384提供384位 vs. 256位。在实践中,两者对当前威胁模型均被认为是安全的,但SHA-384为长期数据保护提供了更大的安全余量,且被某些政府标准强制要求。
TLS为什么使用SHA-384而不是SHA-512?
TLS_AES_256_GCM_SHA384等TLS密码套件使用SHA-384,因为它能提供足够的碰撞抵抗(192位),同时保持摘要大小可控。SHA-512的128字符十六进制输出会在握手消息和证书链中增加开销,而对于TLS的使用场景来说,这种开销并不带来对等的安全收益。SHA-384还与AES-256所针对的192位安全等级相匹配。
SHA-384如何用于子资源完整性(SRI)?
HTML中的SRI标签使用integrity="sha384-{base64hash}"格式,用于验证从CDN获取的脚本和样式表未被篡改。浏览器计算下载文件的SHA-384哈希值,并与预期值进行比对,若不匹配则阻止加载该资源。SHA-384是SRI中最常用的算法,因为它在安全性和摘要大小之间取得了良好平衡。
SHA-384可以被逆向以还原原始输入吗?
不能。SHA-384在设计上是单向函数,具备384位原像抵抗能力,即没有已知方法能从SHA-384摘要还原输入,而无需穷举2^384种可能性。然而,对于简短或可预测的输入(如常见密码),可以通过预计算的彩虹表或字典攻击找到原始值,这正是为什么密码应使用bcrypt或Argon2等专用算法进行哈希处理。
Web Crypto API支持SHA-384吗?
支持。所有现代浏览器均通过crypto.subtle.digest('SHA-384', data)实现SHA-384。这与本工具所使用的API相同。它在Node.js 18+和Deno中同样可用。Web Crypto API返回一个ArrayBuffer,需通过将每个字节映射为两位十六进制字符来转换为十六进制字符串。
什么情况下应该使用SHA-384而不是SHA-256?
当你的安全策略要求超过128位的碰撞抵抗、需要符合CNSA/Suite B对机密数据的合规要求,或者已在使用AES-256并希望匹配192位安全等级时,应选择SHA-384。SHA-384在64位处理器上的运行速度也比SHA-256更快,因为它使用原生64位字运算。对于大多数Web应用和通用哈希场景,SHA-256仍是标准选择。