SHA-1 Hash Generator
Vygenerujte SHA-1 hash z libovolného textu
Vstupní text
SHA-1 hash
SHA-1 hash se zobrazí zde…
Co je SHA-1 hashování?
SHA-1 (Secure Hash Algorithm 1) je kryptografická hašovací funkce, která z libovolného vstupu vytvoří pevný 160bitový (20bajtový) výtah. Publikována agenturou NSA a standardizována organizací NIST v roce 1995 jako FIPS PUB 180-1, později zdokumentována v RFC 3174, byla SHA-1 navržena jako silnější nástupce SHA-0 a MD5. Algoritmus zpracovává vstup v 512bitových blocích přes 80 kol bitových operací a produkuje 40znakový hexadecimální otisk, který byl po více než deset let páteří SSL/TLS, PGP, SSH a IPsec.
Jako všechny kryptografické hašovací funkce je SHA-1 jednosměrnou transformací: výpočet hashe ze vstupu je rychlý, ale zpětné získání vstupu ze samotného hashe je výpočetně neproveditelné. Jednobitkové změna vstupu způsobí zcela odlišný 160bitový výtah — vlastnost zvaná lavinový efekt. SHA-1 mapuje libovolně velký vstupní prostor na pevný 160bitový výstup, což matematicky znamená, že kolize (dva různé vstupy se stejným hashem) existovat musí. Bezpečnostní předpoklad hašovací funkce říká, že nalezení takových kolizí by mělo vyžadovat přibližně 2^80 operací — polovinu délky výstupních bitů.
V roce 2017 Google a CWI Amsterdam publikovaly útok SHAttered, který demonstroval první praktickou kolizi SHA-1 vytvořením dvou různých souborů PDF se stejným výtahem. Útok vyžadoval přibližně 2^63.1 výpočtů SHA-1 — výrazně pod teoretickou hranicí 2^80. V roce 2020 Gaetan Leurent a Thomas Peyrin náklady dále snížili útokem kolize s volenou předponou vyžadujícím přibližně 2^63.4 operací. Výsledkem je, že všechny hlavní prohlížeče, certifikační autority a normalizační orgány zavrhly SHA-1 pro digitální podpisy a certifikáty TLS. SHA-1 však zůstává aktivně využívána pro nezbezpečnostní účely: identifikátory objektů Git (přestože Git přechází na SHA-256), starší konstrukty HMAC a kontrolní součty integrity souborů, kde odolnost vůči kolizím ze strany útočníka není požadována.
Proč používat tento generátor SHA-1?
Generujte SHA-1 hashe okamžitě bez instalace čehokoli nebo psaní kódu. Vložte text a získejte 40znakový hexadecimální výtah v reálném čase — užitečné pro ověřování starších kontrolních součtů, ladění vnitřností Gitu nebo testování pracovních postupů založených na hashi.
Případy použití SHA-1
SHA-1 vs. jiné hašovací algoritmy
SHA-1 produkuje 160bitový výtah — delší než MD5 (128 bitů), ale výrazně kratší než algoritmy rodiny SHA-2. Níže uvedená tabulka porovnává velikosti výtahů, standardy a vhodné případy použití jednotlivých algoritmů.
| Algoritmus | Velikost výtahu | Délka hexadecimálního řetězce | Standard | Nejlepší pro |
|---|---|---|---|---|
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Deprecated — legacy git commits, old TLS |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums only — broken since 2004 |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, alternative to SHA-2 |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
Jak funguje SHA-1
SHA-1 sleduje konstrukci Merkle-Damgard: zpráva je doplněna, rozdělena do 512bitových bloků a každý blok je zpracován přes 80 kol bitových operací, které míchají vstup s plánováním zprávy odvozeným z bloku. Pět 32bitových stavových slov (H0 až H4) nese průběžný stav hashe a konečné zřetězení těchto slov produkuje 160bitový výtah.
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
| Krok | Popis |
|---|---|
| Padding | Append a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Expansion | Expand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule. |
| Compression | Process 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79. |
| Output | Concatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters. |
Klíčový rozdíl mezi SHA-1 a MD5 spočívá v počtu stavových slov (5 vs. 4), počtu kol na blok (80 vs. 64) a použití plánování zpráv se zpětnovazební rotací vlevo. Tyto rozdíly dávají SHA-1 větší výstup (160 vs. 128 bitů) a původně poskytovaly vyšší bezpečnostní rezervu, přestože oba algoritmy jsou nyní považovány za prolomené z hlediska odolnosti vůči kolizím.
Ukázky kódu
Jak generovat SHA-1 hashe v oblíbených jazycích a prostředích. Na rozdíl od MD5 je SHA-1 dostupná v prohlížečovém Web Crypto API, takže ji lze použít bez externích knihoven jak v prohlížeči, tak v prostředí Node.js.
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-1', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"import hashlib
# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result) # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a file in chunks
with open('file.bin', 'rb') as f:
sha1 = hashlib.sha1()
for chunk in iter(lambda: f.read(8192), b''):
sha1.update(chunk)
print(sha1.hexdigest())package main
import (
"crypto/sha1"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha1.Sum(data)
fmt.Printf("%x\n", hash)
// → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}# Using sha1sum (Linux) or shasum (macOS) echo -n "hello world" | sha1sum # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # macOS echo -n "hello world" | shasum -a 1 # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # Hash a file sha1sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl sha1 # → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed