MD5 Hash Generator
MD5-hash genereren van elke tekst
Invoertekst
MD5-hash
MD5-hash verschijnt hier…
Wat is MD5-hashing?
MD5 (Message-Digest Algorithm 5) is een cryptografische hashfunctie die een vaste 128-bit (16-byte) digest produceert van elke invoer, ongeacht de grootte. Gepubliceerd in 1992 door Ronald Rivest als RFC 1321, werd MD5 ontworpen als een snellere opvolger van MD4 en werd al snel een van de meest gebruikte hashfuncties op het internet. Het algoritme verwerkt invoer in 512-bit blokken via vier rondes van elk 16 bewerkingen, met een andere niet-lineaire functie per ronde, om een hexadecimale vingerafdruk van 32 tekens te produceren.
Een hashfunctie is een eenrichtingstransformatie: gegeven een invoer kunt u de hash direct berekenen, maar gegeven alleen de hash kunt u de oorspronkelijke invoer niet terughalen. Zelfs een verandering van één bit in de invoer levert een volledig andere digest op — een eigenschap die het lawine-effect wordt genoemd. MD5 zet een oneindige invoerruimte om naar een vaste 128-bit uitvoerruimte, waardoor botsingen (twee verschillende invoerwaarden die dezelfde hash produceren) wiskundig gegarandeerd bestaan, maar een veilige hashfunctie maakt het vinden ervan rekenkundig onhaalbaar.
Sinds 2004 hebben onderzoekers praktische botsingsaanvallen op MD5 aangetoond, wat betekent dat het niet langer als veilig wordt beschouwd voor digitale handtekeningen, certificaten of elke context waarbij botsingsbestendigheid vereist is. MD5 wordt echter nog steeds veel gebruikt voor niet-beveiligingsdoeleinden: het verifiëren van bestandsintegriteit na downloads, het genereren van cachesleutels, het dedupliceren van inhoud en het aanmaken van deterministische identifiers van tekstreeksen. Voor deze toepassingen maken de snelheid van het algoritme en de brede bibliotheekondersteuning het een praktische keuze. In 2008 publiceerden Marc Stevens en collega's een chosen-prefix collision-aanval, wat betekent dat een aanvaller twee documenten kan samenstellen met willekeurig gekozen voorvoegsels die dezelfde digest delen. Deze techniek werd in 2008 gedemonstreerd op het Chaos Communication Congress door een frauduleus Certification Authority-certificaat samen te stellen. De Flame-malware uit 2012 maakte vervolgens gebruik van chosen-prefix-botsingen om een Microsoft code-signing-certificaat te vervalsen, waardoor malware zich kon voordoen als een legitiem Windows Update-pakket. Deze praktijkexploits bevestigden dat het algoritme cryptografisch gebroken is voor elk vertrouwensanker gebruik en niet mag worden ingezet wanneer een aanvaller de gehashte invoer kan beïnvloeden.
Waarom deze MD5-generator gebruiken?
Genereer MD5-hashes direct zonder iets te installeren of code te schrijven. Plak uw tekst en ontvang de 32-tekens hexadecimale digest in realtime.
MD5-gebruiksscenario's
MD5 vs andere hashalgoritmen
MD5 is de snelste en kortste van de gangbare hashalgoritmen, maar biedt de zwakste beveiligingsgaranties. De onderstaande tabel vergelijkt digestgroottes, standaarden en geschikte gebruiksscenario's voor elk algoritme.
| Algoritme | Digestgrootte | Hex-lengte | Standaard | Geschikt voor |
|---|---|---|---|---|
| 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 |
Hoe MD5 werkt
MD5 verwerkt invoer via een Merkle-Damgård-constructie: het bericht wordt opgevuld tot een veelvoud van 512 bits, opgesplitst in blokken, en elk blok wordt door vier rondes van 16 bitsgewijze bewerkingen geleid die de invoer mengen met vooraf berekende op sinus gebaseerde constanten. Het resultaat is een 128-bit toestand die de uiteindelijke digest vormt.
Elke ronde past een afzonderlijke niet-lineaire hulpfunctie toe op drie van de vier 32-bit toestandswoorden (A, B, C, D). Ronde 1 gebruikt F(B,C,D) = (B AND C) OR (NOT B AND D) — een bitsgewijze voorwaardelijke selector. Ronde 2 gebruikt G(B,C,D) = (B AND D) OR (C AND NOT D) — een complementaire selector. Ronde 3 gebruikt H(B,C,D) = B XOR C XOR D — een pariteitsfunctie. Ronde 4 gebruikt I(B,C,D) = C XOR (B OR NOT D) — een asymmetrische combinator. Deze vier functies zorgen ervoor dat elk bit van de invoer de uitvoerdigest beïnvloedt, wat het lawine-effect produceert waardoor kleine invoerwijzigingen grote, onvoorspelbare veranderingen in de resulterende hash veroorzaken.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
Het algoritme verloopt in vijf stappen: (1) voeg een 1-bit toe, gevolgd door nullen, totdat de berichtlengte 448 mod 512 is; (2) voeg de oorspronkelijke berichtlengte toe als een 64-bit little-endian geheel getal; (3) initialiseer vier 32-bit toestandsvariabelen (A, B, C, D) met vaste constanten; (4) verwerk elk 512-bit blok via 64 bewerkingen met vier niet-lineaire functies (F, G, H, I), één per ronde van 16 bewerkingen; (5) voeg de resulterende toestand toe aan het lopende totaal en voer de uiteindelijke 128-bit hash uit in little-endian bytesvolgorde.
Codevoorbeelden
MD5-hashes genereren in populaire talen en omgevingen. Let op: MD5 is niet beschikbaar in de browser Web Crypto API — gebruik een bibliotheek of 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