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摘要。
SHA-384哈希生成器使用场景
SHA-2家族变体对比
SHA-384与其他多个变体同属SHA-2家族。下表展示了它们在摘要大小、输出长度和典型应用场景上的差异。
| 变体 | 摘要长度 | 十六进制长度 | 字节大小 | 适用场景 |
|---|---|---|---|---|
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | TLS 1.2/1.3, government/CNSA, certificate signatures |
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS, blockchain, code signing, JWTs, SRI |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC with large keys |
| SHA-224 | 224 bits | 56 hex chars | 28 bytes | Truncated SHA-256 — rare, specific compliance |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-384 与 SHA-256、SHA-512、SHA-3-384 对比
在SHA-384与其他哈希算法之间做出选择,取决于你的安全需求、平台限制和性能要求。以下对比涵盖了最关键的属性。
| 属性 | SHA-384 | SHA-256 | SHA-512 | SHA-3-384 |
|---|---|---|---|---|
| Digest size | 384 bits (96 hex) | 256 bits (64 hex) | 512 bits (128 hex) | 384 bits (96 hex) |
| Internal state | 512 bits (8x64-bit) | 256 bits (8x32-bit) | 512 bits (8x64-bit) | 1600 bits (sponge) |
| Block size | 1024 bits | 512 bits | 1024 bits | 832 bits |
| Rounds | 80 | 64 | 80 | 24 |
| Word size | 64 bits | 32 bits | 64 bits | N/A (sponge) |
| Length extension | Resistant | Vulnerable | Vulnerable | Resistant |
| 64-bit performance | Fast (native ops) | Slower (32-bit ops) | Fast (native ops) | Moderate |
| Standard | FIPS 180-4 | FIPS 180-4 | FIPS 180-4 | FIPS 202 |
| Web Crypto API | Yes | Yes | Yes | No |
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位。
SHA-384: fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
(384 bits = 48 bytes = 96 hex characters)
截断和不同的初始化方式意味着SHA-384和SHA-512对相同的输入始终会生成不同的摘要。这也使SHA-384天然具备对长度扩展攻击的抵抗能力,而SHA-256和SHA-512则存在此类漏洞——攻击者可以在不知道原始消息的情况下追加数据并计算出有效哈希。
SHA-384代码示例
SHA-384在所有主流语言和运行时中均原生支持。以下是可直接复制到项目中使用的完整示例。
// 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"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())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
}# 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