Generatore di hash

Genera hash MD5 e SHA di qualsiasi testo e confrontali con un checksum atteso.

Input
MD5Compromesso
SHA-1Compromesso
SHA-256
SHA-384
SHA-512

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.