Generatore Hash MD5
Genera hash MD5 da qualsiasi testo
Testo di input
Hash MD5
L'hash MD5 apparirà qui…
Cos'è l'hashing MD5?
MD5 (Message-Digest Algorithm 5) è una funzione hash crittografica che produce un digest fisso di 128 bit (16 byte) da qualsiasi input, indipendentemente dalla sua dimensione. Pubblicato nel 1992 da Ronald Rivest come RFC 1321, MD5 è stato progettato come successore più veloce di MD4 ed è diventato rapidamente una delle funzioni hash più utilizzate su internet. L'algoritmo elabora l'input in blocchi da 512 bit attraverso quattro cicli di 16 operazioni ciascuno, usando una diversa funzione non lineare per ogni ciclo, per produrre un'impronta digitale esadecimale di 32 caratteri.
Una funzione hash è una trasformazione unidirezionale: dato un input, puoi calcolarne l'hash istantaneamente, ma dato solo l'hash, non puoi recuperare l'input originale. Anche un cambiamento di un singolo bit nell'input produce un digest completamente diverso — una proprietà chiamata effetto valanga. MD5 mappa uno spazio di input infinito su uno spazio di output fisso a 128 bit, quindi le collisioni (due input diversi che producono lo stesso hash) sono matematicamente garantite, ma una funzione hash sicura rende computazionalmente non fattibile trovarle.
Dal 2004, i ricercatori hanno dimostrato attacchi di collisione pratici contro MD5, il che significa che non è più considerato sicuro per firme digitali, certificati o qualsiasi contesto in cui è richiesta la resistenza alle collisioni. Tuttavia, MD5 rimane ampiamente utilizzato per scopi non di sicurezza: verifica dell'integrità dei file dopo i download, generazione di chiavi di cache, deduplicazione dei contenuti e creazione di identificatori deterministici da stringhe. Per queste applicazioni, la velocità dell'algoritmo e il supporto ubiquo delle librerie lo rendono una scelta pratica. Nel 2008, Marc Stevens e colleghi pubblicarono un attacco di collisione a prefisso scelto, il che significa che un attaccante può creare due documenti con prefissi scelti arbitrariamente che condividono lo stesso digest. Questa tecnica fu dimostrata al Chaos Communication Congress del 2008 costruendo un certificato di Certification Authority fraudolento. Il malware Flame del 2012 sfruttò successivamente le collisioni a prefisso scelto per falsificare un certificato di firma del codice Microsoft, consentendo al malware di mascherarsi come un aggiornamento legittimo di Windows. Questi exploit reali confermarono che l'algoritmo è crittograficamente compromesso per qualsiasi uso basato sulla fiducia e non dovrebbe essere utilizzato dove un avversario può influenzare gli input sottoposti ad hashing.
Perché usare questo generatore MD5?
Genera hash MD5 istantaneamente senza installare nulla o scrivere codice. Incolla il testo e ottieni il digest esadecimale di 32 caratteri in tempo reale.
Casi d'uso di MD5
MD5 vs altri algoritmi hash
MD5 è il più veloce e breve tra i comuni algoritmi hash, ma offre le garanzie di sicurezza più deboli. La tabella sottostante confronta dimensioni del digest, standard e casi d'uso appropriati per ciascun algoritmo.
| Algoritmo | Dimensione digest | Lunghezza esadecimale | Standard | Ideale per |
|---|---|---|---|---|
| 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 |
Come funziona MD5
MD5 elabora l'input attraverso una costruzione di Merkle-Damgård: il messaggio viene riempito fino a un multiplo di 512 bit, diviso in blocchi, e ogni blocco viene passato attraverso quattro cicli di 16 operazioni bit a bit che mescolano l'input con costanti precompute derivate dal seno. Il risultato è uno stato di 128 bit che diventa il digest finale.
Ogni ciclo applica una diversa funzione ausiliaria non lineare a tre delle quattro parole di stato a 32 bit (A, B, C, D). Il ciclo 1 usa F(B,C,D) = (B AND C) OR (NOT B AND D) — un selettore condizionale bit a bit. Il ciclo 2 usa G(B,C,D) = (B AND D) OR (C AND NOT D) — un selettore complementare. Il ciclo 3 usa H(B,C,D) = B XOR C XOR D — una funzione di parità. Il ciclo 4 usa I(B,C,D) = C XOR (B OR NOT D) — un combinatore asimmetrico. Queste quattro funzioni garantiscono che ogni bit dell'input influenzi il digest di output, producendo l'effetto valanga che fa sì che piccoli cambiamenti all'input causino grandi cambiamenti imprevedibili all'hash risultante.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
L'algoritmo procede in cinque fasi: (1) aggiunge un bit 1, poi degli zeri, finché la lunghezza del messaggio è 448 mod 512; (2) aggiunge la lunghezza originale del messaggio come intero a 64 bit little-endian; (3) inizializza quattro variabili di stato a 32 bit (A, B, C, D) con costanti fisse; (4) elabora ogni blocco da 512 bit attraverso 64 operazioni usando quattro funzioni non lineari (F, G, H, I), una per ciclo di 16 operazioni; (5) somma lo stato risultante al totale progressivo e restituisce l'hash finale a 128 bit in ordine di byte little-endian.
Esempi di codice
Come generare hash MD5 nei linguaggi e ambienti più diffusi. Nota che MD5 non è disponibile nell'API Web Crypto del browser — usa una libreria o 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