Generatore Hash MD5

Genera hash MD5 da qualsiasi testo

Testo di input

Esegue in locale · Sicuro per incollare segreti

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.

Hashing istantaneo
L'output si aggiorna mentre digiti. Nessun clic su pulsanti, nessuna attesa — il digest MD5 appare carattere per carattere mentre modifichi l'input.
🔒
Elaborazione privacy-first
Tutto l'hashing viene eseguito localmente nel tuo browser tramite JavaScript. Il testo di input non lascia mai il tuo dispositivo e non viene mai inviato a nessun server.
📋
Copia in un clic
Copia l'hash negli appunti con un solo clic. Alterna tra output esadecimale minuscolo e maiuscolo per adattarti al formato che il tuo sistema si aspetta.
🔍
Nessun account richiesto
Nessuna registrazione, nessun accesso, nessun limite di utilizzo. Apri la pagina e inizia subito a calcolare hash. Funziona su qualsiasi dispositivo con un browser moderno.

Casi d'uso di MD5

Sviluppo frontend
Genera hash per il cache-busting degli asset statici. Aggiungi un digest MD5 del contenuto del file agli URL di CSS e JavaScript in modo che i browser scarichino la versione aggiornata quando il contenuto cambia.
Sviluppo backend
Crea chiavi di cache deterministiche da parametri di query complessi o corpi di richiesta. Gli hash MD5 producono chiavi compatte e di lunghezza fissa che funzionano bene con Redis, Memcached e i livelli di cache CDN.
DevOps e CI/CD
Verifica l'integrità dei file dopo i trasferimenti confrontando i checksum MD5. Molti registri di pacchetti e repository di artefatti pubblicano digest MD5 insieme ai download per una verifica rapida.
QA e testing
Confronta gli hash MD5 di risposte API, dump del database o file di configurazione per rilevare cambiamenti inattesi tra esecuzioni di test senza fare il diff dell'intero contenuto.
Data engineering
Deduplica i record nelle pipeline ETL calcolando hash MD5 del contenuto delle righe. Due righe con lo stesso hash sono candidate alla deduplicazione, riducendo i costi di archiviazione ed elaborazione.
Apprendimento ed educazione
Sperimenta con le funzioni hash per capire le trasformazioni unidirezionali, l'effetto valanga e perché la resistenza alle collisioni è importante per la sicurezza. MD5 è il hash più semplice e conosciuto da studiare.

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.

AlgoritmoDimensione digestLunghezza esadecimaleStandardIdeale per
MD5128 bits32 hex chars1992 / RFC 1321Checksums, non-security fingerprints
SHA-1160 bits40 hex chars1995 / RFC 3174Legacy git commits (being replaced)
SHA-256256 bits64 hex chars2001 / FIPS 180-4TLS certificates, blockchain, JWTs
SHA-384384 bits96 hex chars2001 / FIPS 180-4Government systems, higher security margin
SHA-512512 bits128 hex chars2001 / FIPS 180-4Digital signatures, HMAC with large keys
SHA-3256 bits64 hex chars2015 / FIPS 202Post-quantum readiness, backup standard
BLAKE3256 bits64 hex chars2020High-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.

Input: "hello world"
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.

JavaScript (Web Crypto — browser & 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"
Python
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())
Go
package main

import (
    "crypto/md5"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := md5.Sum(data)
    fmt.Printf("%x\n", hash)
    // → 5eb63bbbe01eeed093cb22bb8f5acdc3
}
CLI (Linux / macOS)
# 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

Domande frequenti

MD5 è ancora sicuro da usare?
Non è sicuro per applicazioni sensibili alla sicurezza come firme digitali, certificati TLS o hashing delle password. Attacchi di collisione pratici sono stati dimostrati dal 2004 e gli attacchi di collisione a prefisso scelto sono ora fattibili in pochi secondi su hardware comune. Per usi non di sicurezza — checksum, chiavi di cache, deduplicazione dei contenuti — l'algoritmo rimane una scelta pratica e ampiamente supportata.
Qual è la differenza tra MD5 e SHA-256?
L'algoritmo MD5 produce un digest di 128 bit (32 caratteri esadecimali) ed è vulnerabile agli attacchi di collisione. SHA-256 produce un digest di 256 bit (64 caratteri esadecimali) e non ha attacchi pratici noti. SHA-256 è circa il 30-40% più lento del vecchio algoritmo sullo stesso hardware, ma il margine di sicurezza aggiuntivo lo rende la scelta predefinita per qualsiasi applicazione in cui la verifica dell'integrità deve resistere a manomissioni avversariali.
Si può invertire un hash MD5 per ottenere l'input originale?
No. Questa funzione hash è unidirezionale per design — scarta informazioni durante l'hashing. Tuttavia, per input brevi o comuni, gli attaccanti possono usare rainbow table (mappature hash-testo in chiaro precompute) o forza bruta per trovare l'input originale. Ecco perché non dovrebbe mai essere usato per l'archiviazione delle password. Usa bcrypt, scrypt o Argon2 invece.
Perché strumenti diversi producono a volte hash MD5 diversi per lo stesso testo?
La causa più comune sono le differenze di codifica. L'algoritmo opera sui byte, non sui caratteri. La stringa 'hello' produce hash diversi quando codificata come UTF-8 vs. UTF-16 vs. Latin-1. Un altro problema frequente sono i newline finali: echo nella maggior parte delle shell aggiunge un newline (\n) a meno che non si usi echo -n. Verifica sempre i byte esatti sottoposti ad hashing.
Quanto tempo ci vuole per calcolare un hash MD5?
L'algoritmo è estremamente veloce. Sull'hardware moderno, elabora i dati a 3-6 GB/s su un singolo core CPU. Una GPU può calcolare miliardi di checksum al secondo. Questa velocità è un vantaggio per la verifica dei file ma una passività per l'hashing delle password, dove algoritmi più lenti (bcrypt, Argon2) sono preferiti proprio perché resistono agli attacchi di forza bruta.
Cos'è una collisione MD5 e perché è importante?
Una collisione si verifica quando due input diversi producono lo stesso digest hash. Nel 2004, Xiaoyun Wang ha dimostrato la prima collisione pratica contro MD5. Entro il 2012, il malware Flame ha sfruttato una collisione per falsificare un certificato di firma del codice Microsoft. Oggi, le collisioni a prefisso identico possono essere calcolate in meno di un minuto. Questo rende l'algoritmo inadatto per qualsiasi applicazione che dipende dalla resistenza alle collisioni, come le firme digitali o il certificate pinning.
Dovrei usare MD5 o CRC32 per i checksum dei file?
Questo checksum è una scelta migliore di CRC32 per la verifica dell'integrità dei file. CRC32 è un codice di rilevamento degli errori a 32 bit progettato per rilevare la corruzione accidentale durante la trasmissione, non la manomissione intenzionale. Il suo piccolo spazio di output significa che le collisioni sono banalmente facili da costruire. Fornisce un digest a 128 bit con una resistenza alle collisioni accidentali molto più forte. Per scenari avversariali (verifica di download da fonti non affidabili), usa SHA-256.