Generator Skrótu MD5
Generuj skrót MD5 z dowolnego tekstu
Tekst wejściowy
Skrót MD5
Skrót MD5 pojawi się tutaj…
Czym jest haszowanie MD5?
MD5 (Message-Digest Algorithm 5) to kryptograficzna funkcja skrótu, która produkuje stały 128-bitowy (16-bajtowy) skrót z dowolnego wejścia, niezależnie od jego rozmiaru. Opublikowany w 1992 roku przez Ronalda Rivesta jako RFC 1321, MD5 został zaprojektowany jako szybszy następca MD4 i szybko stał się jedną z najszerzej stosowanych funkcji skrótu w internecie. Algorytm przetwarza dane wejściowe w 512-bitowych blokach przez cztery rundy po 16 operacji każda, używając innej nieliniowej funkcji w każdej rundzie, aby wyprodukować 32-znakowy szesnastkowy odcisk palca.
Funkcja skrótu to transformacja jednokierunkowa: mając dane wejściowe, możesz natychmiast obliczyć skrót, ale mając tylko skrót, nie możesz odtworzyć oryginalnego wejścia. Nawet zmiana jednego bitu w danych wejściowych daje zupełnie inny skrót — właściwość nazywana efektem lawinowym. MD5 odwzorowuje nieskończoną przestrzeń wejściową na stałą 128-bitową przestrzeń wyjściową, więc kolizje (dwa różne dane wejściowe dające ten sam skrót) są matematycznie gwarantowane, ale bezpieczna funkcja skrótu sprawia, że ich znalezienie jest obliczeniowo niewykonalne.
Od 2004 roku badacze zademonstrować praktyczne ataki kolizyjne przeciwko MD5, co oznacza, że nie jest już uważany za bezpieczny do podpisów cyfrowych, certyfikatów ani żadnego kontekstu, gdzie wymagana jest odporność na kolizje. MD5 pozostaje jednak szeroko stosowany do celów niezwiązanych z bezpieczeństwem: weryfikacja integralności pliku po pobraniu, generowanie kluczy pamięci podręcznej, deduplikacja treści oraz tworzenie deterministycznych identyfikatorów z ciągów znaków. W tych zastosowaniach szybkość algorytmu i powszechna obsługa bibliotek czynią go praktycznym wyborem. W 2008 roku Marc Stevens i współpracownicy opublikowali atak kolizji z wybranym prefiksem, co oznacza, że atakujący może spreparować dwa dokumenty z dowolnie wybranymi prefiksami, które mają ten sam skrót. Technikę tę zademonstrowano na Chaos Communication Congress 2008 przez skonstruowanie fałszywego certyfikatu Certification Authority. Złośliwe oprogramowanie Flame z 2012 roku następnie wykorzystało kolizje z wybranym prefiksem do sfałszowania certyfikatu podpisywania kodu Microsoft, umożliwiając mu podszywanie się pod legalną aktualizację Windows. Te rzeczywiste exploity potwierdziły, że algorytm jest kryptograficznie złamany dla wszelkich zastosowań opartych na zaufaniu.
Dlaczego warto użyć tego generatora MD5?
Generuj skróty MD5 natychmiast bez instalowania czegokolwiek lub pisania kodu. Wklej tekst i uzyskaj 32-znakowy skrót szesnastkowy w czasie rzeczywistym.
Przypadki użycia MD5
MD5 a inne algorytmy skrótu
MD5 jest najszybszym i najkrótszym spośród popularnych algorytmów skrótu, ale oferuje najsłabsze gwarancje bezpieczeństwa. Poniższa tabela porównuje rozmiary skrótów, standardy i odpowiednie przypadki użycia dla każdego algorytmu.
| Algorytm | Rozmiar skrótu | Długość hex | Standard | Najlepszy do |
|---|---|---|---|---|
| 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 działa MD5
MD5 przetwarza dane wejściowe przez konstrukcję Merkle-Damgård: wiadomość jest dopełniana do wielokrotności 512 bitów, dzielona na bloki, a każdy blok jest przepuszczany przez cztery rundy 16 operacji bitowych mieszających dane wejściowe z prekompilowanymi stałymi wywodzonymi z sinusa. Wynikiem jest 128-bitowy stan, który staje się finalnym skrótem.
Każda runda stosuje odrębną nieliniową funkcję pomocniczą do trzech z czterech 32-bitowych słów stanu (A, B, C, D). Runda 1 używa F(B,C,D) = (B AND C) OR (NOT B AND D) — bitowy selektor warunkowy. Runda 2 używa G(B,C,D) = (B AND D) OR (C AND NOT D) — komplementarny selektor. Runda 3 używa H(B,C,D) = B XOR C XOR D — funkcja parzystości. Runda 4 używa I(B,C,D) = C XOR (B OR NOT D) — asymetryczny łącznik. Te cztery funkcje zapewniają, że każdy bit danych wejściowych wpływa na skrót wyjściowy, tworząc efekt lawinowy, który sprawia, że małe zmiany na wejściu powodują duże, nieprzewidywalne zmiany wynikowego skrótu.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
Algorytm przebiega w pięciu etapach: (1) dołącz bit 1, a następnie zera, aż długość wiadomości wyniesie 448 mod 512; (2) dołącz oryginalną długość wiadomości jako 64-bitową liczbę całkowitą little-endian; (3) zainicjuj cztery 32-bitowe zmienne stanu (A, B, C, D) stałymi wartościami; (4) przetwarzaj każdy 512-bitowy blok przez 64 operacje używając czterech nieliniowych funkcji (F, G, H, I), po jednej na rundę 16 operacji; (5) dodaj wynikowy stan do sumy bieżącej i wyprowadź finalny 128-bitowy skrót w kolejności bajtów little-endian.
Przykłady kodu
Jak generować skróty MD5 w popularnych językach i środowiskach. Pamiętaj, że MD5 nie jest dostępne w przeglądarkowym Web Crypto API — użyj biblioteki lub 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