MD5 Hash Generator
Vygenerujte MD5 hash z libovolného textu
Vstupní text
MD5 hash
MD5 hash se zobrazí zde…
Co je hashování MD5?
MD5 (Message-Digest Algorithm 5) je kryptografická hashovací funkce, která z libovolného vstupu — bez ohledu na jeho velikost — vytváří pevný 128bitový (16bajtový) otisk. Algoritmus byl publikován v roce 1992 Ronaldem Rivistem jako RFC 1321, navržen jako rychlejší nástupce MD4, a rychle se stal jednou z nejpoužívanějších hashovacích funkcí na internetu. Algoritmus zpracovává vstup v 512bitových blocích prostřednictvím čtyř kol po 16 operacích, přičemž každé kolo používá jinou nelineární funkci, a produkuje 32znakový hexadecimální otisk.
Hashovací funkce je jednosměrná transformace: ze vstupu lze okamžitě vypočítat hash, ale ze samotného hashe nelze původní vstup obnovit. Dokonce i jednobitvá změna vstupu vyvolá zcela jiný otisk — vlastnost zvaná lavinový efekt. MD5 mapuje nekonečný vstupní prostor na pevný 128bitový výstupní prostor, takže kolize (dva různé vstupy se stejným hashem) matematicky nutně existují, ale bezpečná hashovací funkce by jejich nalezení měla učinit výpočetně neproveditelným.
Od roku 2004 výzkumníci demonstrovali praktické útoky kolizemi proti MD5, což znamená, že algoritmus již není považován za bezpečný pro digitální podpisy, certifikáty ani jiné kontexty vyžadující odolnost vůči kolizím. MD5 však zůstává široce používán pro účely bez bezpečnostního dopadu: ověřování integrity souborů po stažení, generování klíčů mezipaměti, deduplikace obsahu a vytváření deterministických identifikátorů z řetězců. Pro tyto aplikace je rychlost algoritmu a jeho všudypřítomná podpora v knihovnách praktickou volbou. V roce 2008 Marc Stevens a kolegové publikovali útok zvolenou předponou, při němž může útočník vytvořit dva dokumenty s libovolně zvolenými předponami sdílejícími stejný otisk. Tato technika byla demonstrována na konferenci Chaos Communication Congress v roce 2008 vytvořením podvodného certifikátu certifikační autority. Malware Flame z roku 2012 následně využil kolize zvolené předpony k zfalšování certifikátu pro podpis kódu Microsoftu, čímž umožnil malwaru vydávat se za legitimní balíček Windows Update. Tyto reálné exploity potvrdily, že algoritmus je kryptograficky zlomený pro jakékoli důvěryhodné použití a neměl by být používán tam, kde může protivník ovlivnit hashované vstupy.
Proč použít tento generátor MD5?
Generujte MD5 hashe okamžitě bez instalace čehokoli nebo psaní kódu. Vložte text a získejte 32znakový hexadecimální otisk v reálném čase.
Případy použití MD5
MD5 vs. jiné hashovací algoritmy
MD5 je nejrychlejší a nejkratší z běžných hashovacích algoritmů, ale nabízí nejslabší bezpečnostní záruky. Níže uvedená tabulka porovnává velikosti otisků, standardy a vhodné případy použití jednotlivých algoritmů.
| Algoritmus | Velikost otisku | Délka hex výstupu | Standard | Nejlépe pro |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| 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 |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
Jak MD5 funguje
MD5 zpracovává vstup prostřednictvím konstrukce Merkle-Damgård: zpráva je doplněna na násobek 512 bitů, rozdělena do bloků a každý blok je zpracován čtyřmi koly po 16 bitových operacích, které míchají vstup s předpočítanými konstantami odvozenými ze sinu. Výsledkem je 128bitový stav, který se stane konečným otiskem.
Každé kolo aplikuje odlišnou nelineární pomocnou funkci na tři ze čtyř 32bitových stavových slov (A, B, C, D). Kolo 1 používá F(B,C,D) = (B AND C) OR (NOT B AND D) — bitový podmíněný selektor. Kolo 2 používá G(B,C,D) = (B AND D) OR (C AND NOT D) — doplňkový selektor. Kolo 3 používá H(B,C,D) = B XOR C XOR D — funkci parity. Kolo 4 používá I(B,C,D) = C XOR (B OR NOT D) — asymetrický kombinátor. Tyto čtyři funkce zajišťují, že každý bit vstupu ovlivňuje výstupní otisk a vyvolává lavinový efekt, díky němuž malé změny vstupu způsobují velké, nepředvídatelné změny výsledného hashe.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
Algoritmus probíhá v pěti fázích: (1) připojení bitu 1, poté nul, dokud délka zprávy není 448 mod 512; (2) připojení původní délky zprávy jako 64bitového celého čísla v little-endian pořadí; (3) inicializace čtyř 32bitových stavových proměnných (A, B, C, D) pevnými konstantami; (4) zpracování každého 512bitového bloku 64 operacemi s využitím čtyř nelineárních funkcí (F, G, H, I), po jedné na kolo 16 operací; (5) přičtení výsledného stavu k průběžnému součtu a výstup konečného 128bitového hashe v little-endian pořadí bajtů.
Příklady kódu
Jak generovat MD5 hashe v oblíbených jazycích a prostředích. Upozorňujeme, že MD5 není dostupné v prohlížečovém Web Crypto API — použijte knihovnu nebo Node.js.
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3