SHA-384 Hash Generator
Генерирует 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. Он использует те же размер блока в 1024 бита, 80 раундов сжатия и 64-битную арифметику слов, что и SHA-512, однако начинает с другого набора начальных значений хеша (производных от 9-го по 16-й простых чисел) и выводит лишь первые 384 бита итогового состояния. Такое усечение означает, что SHA-384 даёт дайджест, отличный от SHA-512 для идентичных входных данных, несмотря на использование одного базового алгоритма.
Поскольку SHA-384 оперирует 64-битными словами, он работает быстрее SHA-256 на современных 64-битных процессорах, обеспечивая при этом более длинный дайджест. Это делает его практическим компромиссом: он надёжнее SHA-256 (192-битная устойчивость к коллизиям против 128-битной) без накладных расходов на хранение 128-символьного hex-вывода SHA-512. SHA-384 является хешем по умолчанию для подтверждения подписи сертификата в TLS 1.3 и обязателен в NSA Suite B (ныне CNSA) для данных с грифом «Совершенно секретно».
Зачем использовать онлайн-генератор SHA-384?
Генерация SHA-384-хешей обычно требует команды в терминале или написания кода. Этот браузерный инструмент позволяет вычислять SHA-384-дайджесты мгновенно без установки какого-либо ПО и без передачи данных на сервер. Нужно ли сформировать SRI-хеш для CDN-ресурса, проверить контрольную сумму файла или сравнить вывод SHA-384 и SHA-256 для одних и тех же входных данных — инструмент даёт непосредственный и независимый способ работы с SHA-384-дайджестами в любом современном браузере.
Сценарии использования SHA-384 Hash Generator
Сравнение вариантов семейства SHA-2
SHA-384 входит в семейство SHA-2 наряду с несколькими другими вариантами. В таблице ниже показаны их различия по размеру дайджеста, длине вывода и типичным областям применения.
| Вариант | Дайджест | Длина в hex | Байты | Оптимален для |
|---|---|---|---|---|
| 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 vs SHA-256 vs SHA-512 vs 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. Данные дополняются до кратного 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