SHA-256 Hash Generator
Генерирует SHA-256-хеш из любого текста
Входной текст
SHA-256-хеш
SHA-256-хеш будет отображен здесь…
Что такое SHA-256-хеширование?
SHA-256 (Secure Hash Algorithm 256-bit) — криптографическая хеш-функция семейства SHA-2, опубликованная NIST в 2001 году в составе FIPS 180-2 (обновлена в FIPS 180-4). Для любых входных данных — одного символа, многогигабайтного файла или пустой строки — SHA-256 вычисляет фиксированный 256-битный (32-байтовый) дайджест, который принято отображать в виде 64 шестнадцатеричных символов. SHA-256 — наиболее широко применяемая хеш-функция в production-системах: она лежит в основе цепочек TLS-сертификатов, доказательства работы Bitcoin, Subresource Integrity (SRI) и рабочих процессов подписи кода.
SHA-256 является односторонней функцией: вычисление хеша из входных данных выполняется быстро (сотни мегабайт в секунду на современном оборудовании), однако обратный процесс — нахождение входных данных, дающих заданный хеш, — вычислительно неосуществим. Это свойство, называемое устойчивостью к прообразам, делает SHA-256 пригодным для хеширования паролей (в сочетании с солью и растяжением ключа), цифровых подписей и проверки целостности данных. В отличие от MD5 и SHA-1, ни одна атака на коллизии или прообразы против полного SHA-256 не была продемонстрирована.
Семейство SHA-2 включает шесть вариантов: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 и SHA-512/256. SHA-256 работает с 32-битными словами и выполняет 64 раунда на блок, будучи оптимизирован для 32-битных процессоров. SHA-512 использует 64-битные слова и 80 раундов, что может обеспечивать более высокую скорость на 64-битных платформах. Для большинства задач, где достаточно 256-битного дайджеста, SHA-256 остаётся рекомендацией по умолчанию от NIST, IETF и CA/Browser Forum.
Зачем использовать онлайн-генератор SHA-256?
Генерация SHA-256-хеша обычно требует команды в терминале или нескольких строк кода. Этот браузерный инструмент позволяет вычислять SHA-256-дайджесты без установки какого-либо ПО, переключения контекста или написания скриптов.
Сценарии использования SHA-256
Сравнение вариантов семейства SHA-2
SHA-256 входит в семейство SHA-2, определённое в FIPS 180-4. Каждый вариант характеризуется компромиссом между размером дайджеста, производительностью и запасом безопасности. В таблице ниже сравниваются все варианты SHA-2, с которыми вы, вероятно, столкнётесь.
| Вариант | Размер дайджеста | Длина в hex | Размер в байтах | Оптимален для |
|---|---|---|---|---|
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS, blockchain, code signing, JWTs, SRI |
| SHA-224 | 224 bits | 56 hex chars | 28 bytes | Truncated SHA-256 — rare, specific compliance |
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | Government / CNSS, higher collision margin |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC with large keys |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-256 против SHA-1, MD5 и SHA-3
Выбор правильного алгоритма хеширования зависит от требований к безопасности и ограничений совместимости. SHA-256 занимает практическую золотую середину: он безопасен, повсеместно поддерживается (включая Web Crypto API) и достаточно быстр для большинства задач. В сравнительной таблице ниже представлены свойства, наиболее важные при выборе хеш-функции.
| Свойство | SHA-256 | SHA-1 | MD5 | SHA-3-256 |
|---|---|---|---|---|
| Digest size | 256 bits (64 hex) | 160 bits (40 hex) | 128 bits (32 hex) | 256 bits (64 hex) |
| Security status | Secure | Broken (2017) | Broken (2004) | Secure |
| Collision resistance | 2^128 operations | Practical attack | Practical attack | 2^128 operations |
| Block size | 512 bits | 512 bits | 512 bits | 1600 bits (sponge) |
| Rounds | 64 | 80 | 64 | 24 |
| Standard | FIPS 180-4 | FIPS 180-4 | RFC 1321 | FIPS 202 |
| Web Crypto API | Yes | Yes | No | No |
| Primary use today | TLS, blockchain, SRI | Legacy git only | Non-security checksums | Backup standard |
Как работает SHA-256 изнутри
SHA-256 обрабатывает входные данные блоками по 512 бит (64 байта) через конструкцию Меркле–Дамгарда. Алгоритм инициализирует восемь 32-битных слов состояния (H0–H7), производных от дробных частей квадратных корней первых восьми простых чисел. Каждый блок проходит через 64 раунда перемешивания с использованием побитовых операций (AND, XOR, NOT, циклический сдвиг вправо, логический сдвиг вправо) и 64 раундовых константы, производных от кубических корней первых 64 простых чисел.
SHA-256: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
(256 bits = 32 bytes = 64 hex characters)
| Шаг | Описание |
|---|---|
| Padding | Append a 1-bit, then zeros until the message length is 448 mod 512. Append the original message length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Message schedule | Expand each 16-word (32-bit) block into 64 words using sigma functions with right-rotate and right-shift operations. |
| Compression | Process 64 rounds per block using Ch, Maj, and two Sigma functions with 64 round constants derived from cube roots of the first 64 primes. |
| Output | Concatenate the eight 32-bit state words (H0-H7) into a 256-bit (32-byte) digest, rendered as 64 hexadecimal characters. |
Лавинный эффект гарантирует, что изменение одного бита во входных данных влечёт изменение примерно 50% битов в выходных. Это свойство в сочетании с устойчивостью к коллизиям уровня 2^128 объясняет, почему SHA-256 остаётся базовой рекомендацией для приложений, критичных к безопасности, в 2026 году.
Примеры кода для SHA-256
SHA-256 доступен нативно в каждом крупном языке и среде выполнения. Web Crypto API предоставляет его в браузерах без каких-либо библиотек. Приведённые ниже примеры демонстрируют реальные паттерны использования, включая обработку Unicode-ввода и хеширование файлов.
// Works in all modern browsers and Node.js 18+
async function sha256(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-256', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha256('hello world')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha256').update('hello world').digest('hex')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"import hashlib
# Basic SHA-256 hash
result = hashlib.sha256(b'hello world').hexdigest()
print(result) # → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
# Hash a string (encode to bytes first)
text = 'café ☕'
hashlib.sha256(text.encode('utf-8')).hexdigest()
# → "3eb53e00aa1bb4b1e8aab1ab38e56e6b8fb0b20e1cf7e1d19f36e4fad2537445"
# Hash a file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
sha = hashlib.sha256()
for chunk in iter(lambda: f.read(8192), b''):
sha.update(chunk)
print(sha.hexdigest())package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha256.Sum256(data)
fmt.Printf("%x\n", hash)
// → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
}# Using sha256sum (Linux) or shasum (macOS) echo -n "hello world" | sha256sum # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # macOS echo -n "hello world" | shasum -a 256 # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # Verify a file checksum echo "b94d27b... myfile.bin" | sha256sum -c # → myfile.bin: OK # Using openssl (cross-platform) echo -n "hello world" | openssl dgst -sha256 # → SHA2-256(stdin)= b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9