Generator Hasha SHA-256
Generuj hash SHA-256 z dowolnego tekstu
Tekst wejściowy
Hash SHA-256
Hash SHA-256 będzie wyświetlany tutaj…
Czym jest haszowanie SHA-256?
SHA-256 (Secure Hash Algorithm 256-bit) to kryptograficzna funkcja skrótu z rodziny SHA-2, opublikowana przez NIST w 2001 roku jako część standardu FIPS 180-2 (zaktualizowanego w FIPS 180-4). Dla dowolnych danych wejściowych — pojedynczego znaku, pliku o rozmiarze kilku gigabajtów lub pustego ciągu — SHA-256 produkuje stały 256-bitowy (32-bajtowy) skrót, konwencjonalnie przedstawiany jako 64 znaki szesnastkowe. SHA-256 jest dziś najszerzej stosowaną funkcją skrótu w systemach produkcyjnych — stanowi fundament łańcuchów certyfikatów TLS, mechanizmu proof-of-work w Bitcoinie, Subresource Integrity (SRI) oraz procesów podpisywania kodu.
SHA-256 jest funkcją jednokierunkową: obliczenie skrótu z danych wejściowych jest szybkie (setki megabajtów na sekundę na nowoczesnym sprzęcie), ale odwrócenie tego procesu — znalezienie danych wejściowych, które dają określony skrót — jest obliczeniowo niewykonalne. Ta właściwość, zwana odpornością na atak pierwotnego obrazu (preimage resistance), sprawia, że SHA-256 nadaje się do haszowania haseł (w połączeniu z solą i rozciąganiem klucza), podpisów cyfrowych oraz weryfikacji integralności danych. W odróżnieniu od MD5 i SHA-1, nie wykazano żadnego ataku kolizyjnego ani ataku na preimage przeciwko pełnemu SHA-256.
Rodzina SHA-2 obejmuje sześć wariantów: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 i SHA-512/256. SHA-256 operuje na 32-bitowych słowach z 64 rundami na blok, zoptymalizowanymi pod procesory 32-bitowe. SHA-512 używa 64-bitowych słów i 80 rund, co może być szybsze na platformach 64-bitowych. Dla większości zastosowań, w których wystarczy 256-bitowy skrót, SHA-256 pozostaje domyślną rekomendacją NIST, IETF i CA/Browser Forum.
Kiedy warto użyć generatora SHA-256 online?
Wygenerowanie skrótu SHA-256 zazwyczaj wymaga polecenia w terminalu lub kilku linii kodu. To narzędzie działające w przeglądarce pozwala obliczać skróty SHA-256 bez instalowania czegokolwiek, przełączania kontekstu ani pisania skryptów.
Zastosowania SHA-256
Porównanie wariantów rodziny SHA-2
SHA-256 należy do rodziny SHA-2 zdefiniowanej w FIPS 180-4. Każdy wariant oferuje inną kombinację rozmiaru skrótu, charakterystyki wydajnościowej i marginesu bezpieczeństwa. Poniższa tabela porównuje wszystkie warianty SHA-2, z którymi możesz się zetknąć.
| Wariant | Rozmiar skrótu | Długość hex | Rozmiar w bajtach | Najlepszy do |
|---|---|---|---|---|
| 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 kontra SHA-1 kontra MD5 kontra SHA-3
Wybór właściwego algorytmu skrótu zależy od wymagań bezpieczeństwa i ograniczeń kompatybilności. SHA-256 zajmuje praktyczny punkt środkowy: jest bezpieczny, powszechnie obsługiwany (włącznie z Web Crypto API) i wystarczająco szybki dla większości obciążeń. Poniższa tabela porównawcza obejmuje właściwości najważniejsze przy wyborze funkcji skrótu.
| Właściwość | 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 |
Jak działa SHA-256 wewnętrznie?
SHA-256 przetwarza dane wejściowe w 512-bitowych (64-bajtowych) blokach przez konstrukcję Merkle–Damgård. Algorytm inicjalizuje osiem 32-bitowych słów stanu (H0–H7) wyprowadzonych z części ułamkowych pierwiastków kwadratowych z pierwszych ośmiu liczb pierwszych. Każdy blok przechodzi przez 64 rundy mieszania wykorzystujące operacje bitowe (AND, XOR, NOT, rotacja w prawo, przesunięcie w prawo) oraz 64 stałe rundy wyprowadzone z pierwiastków sześciennych pierwszych 64 liczb pierwszych.
SHA-256: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
(256 bits = 32 bytes = 64 hex characters)
| Krok | Opis |
|---|---|
| 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. |
Efekt lawinowy zapewnia, że zmiana jednego bitu w danych wejściowych zmienia około 50% bitów wyjściowych. Ta właściwość, w połączeniu z odpornością na kolizje rzędu 2^128, sprawia, że SHA-256 pozostaje bazową rekomendacją dla aplikacji wymagających wysokiego bezpieczeństwa w 2026 roku.
Przykłady kodu SHA-256
SHA-256 jest dostępny natywnie w każdym głównym języku programowania i środowisku uruchomieniowym. Web Crypto API udostępnia go w przeglądarkach bez żadnej biblioteki. Poniższe przykłady przedstawiają rzeczywiste wzorce użycia, w tym obsługę danych wejściowych Unicode i haszowanie plików.
// 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