تولیدکننده هش SHA-384
تولید هش SHA-384 از هر متنی
متن ورودی
هش SHA-384
هش SHA-384 اینجا نمایش داده میشود…
هش SHA-384 چیست؟
SHA-384 یک تابع هش رمزنگاری است که در NIST FIPS 180-4 به عنوان بخشی از خانواده SHA-2 تعریف شده است. این تابع ورودی با طول دلخواه را میپذیرد و یک digest ثابت 384 بیتی (48 بایتی) تولید میکند که معمولاً به صورت یک رشته هگزادسیمال 96 کاراکتری نمایش داده میشود. SHA-384 به طور گسترده در cipher suiteهای TLS، امضای دیجیتال گواهینامهها و سیستمهای دولتی که به حاشیه امنیتی بالاتری نسبت به SHA-256 نیاز دارند، به کار میرود.
در ساختار داخلی، SHA-384 یک نوع کوتاهشده از SHA-512 است. همان اندازه بلوک 1024 بیتی، 80 دور فشردهسازی و حساب اعداد 64 بیتی SHA-512 را به کار میبرد، اما با مجموعهای متفاوت از مقادیر اولیه هش (مشتق شده از اعداد اول نهم تا شانزدهم) شروع میکند و تنها 384 بیت اول از حالت نهایی را خروجی میدهد. این کوتاهسازی به معنای آن است که SHA-384 برای ورودیهای یکسان، digest متفاوتی نسبت به SHA-512 تولید میکند، علیرغم اینکه هر دو از همان الگوریتم پایه استفاده میکنند.
از آنجا که SHA-384 روی کلمات 64 بیتی عمل میکند، روی پردازندههای مدرن 64 بیتی سریعتر از SHA-256 اجرا میشود و در عین حال digest بزرگتری ارائه میدهد. این ویژگی آن را به یک گزینه میانی عملی تبدیل میکند: قویتر از SHA-256 (مقاومت 192 بیتی در برابر collision در مقابل 128 بیتی) بدون سربار ذخیرهسازی خروجی 128 کاراکتری هگز SHA-512. SHA-384 هش پیشفرض برای امضای تأییدیه گواهی TLS 1.3 است و توسط NSA Suite B (اکنون CNSA) برای دادههای سری مورد نیاز است.
چرا از تولیدکننده آنلاین SHA-384 استفاده کنیم؟
تولید هشهای SHA-384 معمولاً نیاز به دستور terminal یا نوشتن کد دارد. این ابزار مبتنی بر مرورگر به شما امکان میدهد digest های SHA-384 را فوراً و بدون نصب هیچ چیز یا ارسال داده به سرور محاسبه کنید. چه بخواهید یک هش SRI برای یک asset از CDN تولید کنید، checksum فایلی را تأیید کنید، یا خروجی SHA-384 را با SHA-256 برای ورودی یکسان مقایسه کنید، این ابزار روشی فوری و بدون وابستگی برای کار با digest های SHA-384 در هر مرورگر مدرنی فراهم میکند.
موارد استفاده از تولیدکننده هش SHA-384
مقایسه انواع خانواده SHA-2
SHA-384 در کنار چندین نوع دیگر به خانواده SHA-2 تعلق دارد. جدول زیر نشان میدهد که آنها از نظر اندازه digest، طول خروجی و کاربردهای معمول چگونه با هم تفاوت دارند.
| نوع | Digest | طول هگز | بایت | بهترین استفاده |
|---|---|---|---|---|
| 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 ورودی را از طریق همان ساختار Merkle-Damgård به کار رفته در SHA-512 پردازش میکند. ورودی به مضربی از 1024 بیت padding میشود، به بلوکها تقسیم میشود و هر بلوک از 80 دور ترکیب با استفاده از توابع Ch، Maj و دو تابع Sigma با حساب کلمات 64 بیتی پردازش میشود. تفاوت اصلی با SHA-512 در مقادیر اولیه هش است: SHA-384 از مقادیر مشتق شده از بخشهای کسری جذر اعداد اول نهم تا شانزدهم استفاده میکند، در حالی که SHA-512 از 8 عدد اول اول استفاده میکند. پس از پردازش تمام بلوکها، SHA-384 حالت داخلی 512 بیتی را به 384 بیت اول کوتاه میکند.
SHA-384: fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
(384 bits = 48 bytes = 96 hex characters)
کوتاهسازی و مقداردهی اولیه متفاوت به این معناست که SHA-384 و SHA-512 همیشه برای ورودی یکسان digest های متفاوتی تولید میکنند. این امر همچنین SHA-384 را ذاتاً در برابر حملات length-extension مقاوم میکند، برخلاف SHA-256 و SHA-512 که در آنها یک مهاجم میتواند داده اضافه کند و بدون دانستن پیام اصلی یک هش معتبر محاسبه کند.
نمونه کدهای SHA-384
SHA-384 به صورت بومی در تمام زبانها و runtime های اصلی پشتیبانی میشود. در زیر نمونههای کاری وجود دارد که میتوانید مستقیماً در پروژههای خود کپی کنید.
// 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