Generatore di hash
Genera hash MD5 e SHA di qualsiasi testo e confrontali con un checksum atteso.
Che cosa fa davvero una funzione di hash
Una funzione di hash crittografica prende un input di qualsiasi dimensione e produce una stringa di byte di lunghezza fissa — un digest, o «hash». Dagli una sola lettera o un romanzo intero: MD5 restituisce sempre 16 byte e SHA-256 sempre 32. Lo stesso input produce sempre lo stesso digest, e cambiare un solo bit in qualunque punto dell’input cambia circa metà dei bit in uscita: ecco perché due file quasi identici hanno hash del tutto scorrelati.
La proprietà cruciale è che la funzione va in una sola direzione. Calcolare l’hash di un file è veloce; risalire al file partendo dall’hash non è soltanto lento, è impossibile in linea di principio, perché un output di lunghezza fissa non può codificare un input illimitato. Un hash è un’impronta digitale, non una copia cifrata: non c’è nulla da decifrare.
A che cosa servono davvero gli hash
- Verificare i download: un progetto pubblica lo SHA-256 di una release, tu calcoli l’hash del file ricevuto e digest uguali significano che i byte sono arrivati integri.
- Rilevare i cambiamenti: sistemi di controllo versione, backup e deduplicazione confrontano hash anziché interi file, perché confrontare 32 byte costa molto meno che confrontare gigabyte.
- Subresource Integrity: una pagina fissa l’hash in Base64 di uno script caricato da una CDN, e il browser si rifiuta di eseguirlo se non corrisponde.
- Conservare le password — ma con una funzione lenta pensata apposta, mai con un hash semplice. Vedi sotto.
Nota il tratto comune: l’hash è un sostituto compatto di qualcosa di più grande, usato per rispondere alla domanda «è la stessa cosa che mi aspettavo?» senza trasmettere né conservare la cosa in sé.
MD5 e SHA-1 sono compromessi: che cosa significa in pratica
Una funzione di hash è considerata compromessa non appena qualcuno riesce a costruire una collisione: due input diversi che producono lo stesso digest. Le collisioni di MD5 si calcolano su hardware comune dal 2004, e nel 2017 l’attacco SHAttered ha prodotto due file PDF diversi con hash SHA-1 identico. È per questo che entrambi gli algoritmi sono segnalati in questo strumento.
La conseguenza pratica è più ristretta di «non usarli mai». Una collisione significa che un attaccante che controlla entrambi i file può far combaciare il digest di uno malevolo con quello di uno innocuo: MD5 e SHA-1 non possono più dimostrare che un file non sia stato manomesso da qualcuno in malafede. Restano perfettamente validi per rilevare corruzioni accidentali — un download troncato, un bit invertito su un disco — e continuerai a incontrarli in sistemi legacy, header ETag e vecchi manifest di pacchetti che nessuno riscriverà.
La regola pratica: se la domanda è «si è danneggiato durante il trasferimento?», MD5 va bene. Se la domanda è «qualcuno lo ha sostituito di proposito?», usa SHA-256 o superiore.
Non conservare mai una password con questi
MD5, SHA-1 e persino SHA-256 sono progettati per essere veloci, e la velocità è esattamente la proprietà sbagliata per conservare password. Una GPU moderna calcola miliardi di hash SHA-256 al secondo, quindi un database rubato di password semplicemente hashate può essere attaccato su scala enorme — e poiché la stessa password produce sempre lo stesso digest, le tabelle precalcolate lo rendono ancora più economico.
La conservazione delle password richiede una funzione deliberatamente lenta, con salt e onerosa in memoria: Argon2id, scrypt o bcrypt. Aggiungono un salt casuale unico per ogni password, così password identiche non condividono il digest, e il loro costo è regolabile, così ogni tentativo costa all’attaccante tempo e memoria reali. Questo strumento serve per checksum e impronte, non per l’hashing delle password.
Leggere e confrontare i digest
Lo stesso digest si può scrivere in più modi. L’esadecimale minuscolo è ciò che stampano gli strumenti standard da riga di comando, ed è di solito quello con cui farai il confronto:
md5sum file.iso # Linux sha256sum file.iso # Linux shasum -a 256 file.iso # macOS Get-FileHash file.iso -Algorithm SHA256 # PowerShell (stampa in maiuscolo) certutil -hashfile file.iso SHA256 # Windows (stampa in maiuscolo)
Nell’esadecimale il maiuscolo o minuscolo non significa nulla: PowerShell e certutil stampano in maiuscolo, gli strumenti Unix in minuscolo, ed è esattamente lo stesso valore. Per questo il campo di confronto di questo strumento ignora le maiuscole nell’esadecimale. Con il Base64 la faccenda cambia: è una codifica più densa degli stessi byte, usata da Subresource Integrity e da varie API, e lì le maiuscole contano — quindi il confronto è esatto.
Un’ultima abitudine da prendere: non confrontare mai a occhio due digest lunghi per decidere se coincidono. L’occhio umano è bravissimo a vedere ciò che si aspetta di vedere, e il fatto che i primi e gli ultimi caratteri corrispondano non significa nulla. Incolla il valore atteso e lascia che il confronto sia esatto.
Domande frequenti
- Il mio testo viene inviato a un server?
- No. Ogni digest è calcolato nel tuo browser: la famiglia SHA tramite le Web Crypto API e MD5 tramite JavaScript eseguito sulla tua macchina. Nulla di ciò che digiti lascia il tuo dispositivo.
- Si può invertire un hash per riottenere il testo originale?
- No. Un hash è un’impronta di lunghezza fissa, non una copia cifrata, e l’originale non può esserne recuperato. I siti che pubblicizzano la «decrittazione MD5» si limitano a cercare il tuo hash in una tabella di input comuni già calcolati, cosa che funziona solo per testi brevi o prevedibili.
- Perché qui MD5 e SHA-1 hanno un avviso?
- Perché per entrambi le collisioni sono praticabili: si possono costruire due input diversi che condividono un digest. Questo li rende inadatti a dimostrare che un file non sia stato manomesso di proposito, anche se restano validi per intercettare corruzioni accidentali.
- Quale algoritmo dovrei usare?
- SHA-256 è la scelta predefinita ragionevole ed è ciò che oggi pubblicano quasi tutti i progetti. SHA-512 non è sensibilmente più sicuro per questo scopo, ma è più veloce su hardware a 64 bit. Usa MD5 o SHA-1 solo quando qualcosa fuori dal tuo controllo li richiede già.
- Posso usare questo strumento per una password?
- Puoi, ma non dovresti conservarne il risultato. La conservazione delle password richiede una funzione lenta e con salt come Argon2id, scrypt o bcrypt: gli hash veloci come questi sono esattamente ciò che rende facili da violare i database rubati.
- Perché gli hash cambiano se aggiungo uno spazio o un a capo?
- Perché gli spazi fanno parte dell’input. Un a capo finale è il motivo più comune per cui un hash non corrisponde a quello che ti aspettavi: il testo copiato da un terminale o da un editor spesso se ne porta dietro uno che non vedi.
- Gestisce correttamente ebraico, arabo ed emoji?
- Sì. Il testo viene codificato in byte UTF-8 prima dell’hashing, che è lo standard usato da tutti gli altri strumenti: calcolare qui l’hash di «שלום» o di un’emoji dà lo stesso digest di md5sum o sha256sum su un file UTF-8 con gli stessi caratteri.
- Perché elabora testo ma non file?
- Le Web Crypto API non hanno un digest in streaming, quindi un file va letto interamente in memoria prima di poter essere elaborato, e l’MD5 scritto a mano sarebbe sensibilmente lento su un file grande. Elaborare testo copre onestamente il caso comune, invece di offrire un hashing di file che blocca la pagina.