software,

Gemelli o diversi?

Sabino Maggi Sabino Maggi Segui 31-Jan-2014 · 4 minuti di lettura
Condividi

Mi capita spesso di ricevere o scaricare dei documenti senza riuscire a capire immediatamente se sono nuove versioni di file che ho già sul Mac o se ho solo prelevato lo stesso file con un nome diverso.

La soluzione più immediata è quella di aprire i documenti in due finestre affiancate e confrontarli ad occhio nudo. È una soluzione perfetta se i documenti sono profondamente diversi, ma non funziona se le differenze sono limitate a poche parole sparse qua e là.

Per essere sicuri al 100% che i file siano identici, basta utilizzare il Terminale di OS X. Il comando in questione è md5 che, in base al manuale, calcola una specie di firma digitale (detta hash) del file che gli viene fornito in ingresso. Il comando utilizza il ben noto algoritmo MD5, che è descritto nei dettagli nell’RFC1321. La particolarità dell’algoritmo è che la probabilità che due file diversi producano lo stesso hash (la cosiddetta collisione) è estremamente bassa.

Questo algoritmo è stato ormai ampiamente superato nelle applicazioni crittografiche, ma per i nostri scopi va più che bene.

Per controllare quindi che due file siano o meno identici, basta lanciare il Terminale (è in Applicazioni ➔ Utility, ma sarebbe meglio trascinarne una volta per tutte l’icona nel Dock), scrivere md5 -q seguito da uno spazio e trascinare una alla volta nel Terminale le icone dei (due o più) file da confrontare, premendo alla fine il tasto Invio. Il risultato è una serie di stringhe alfanumeriche, corrispondenti a ciascuno dei file controllati. Se le stringhe sono uguali lo sono di sicuro anche i file (a meno di casi eccezionali), in caso contrario possiamo essere certi che i file in ingresso differiscono fra loro, anche per un solo carattere.

Un esempio pratico

Prendiamo un file PDF qualunque, File_A1.pdf, trasciniamolo sul Desktop e duplichiamolo, rinominando la copia come File_A2.pdf. Lanciamo il Terminale ed eseguiamo i seguenti comandi (notare che il $ è il prompt del Terminale e non va inserito):

$ cd ~/Desktop

per spostarci nella cartella del Desktop,

$ md5 -q File_A1.pdf File_A2.pdf

che produce in uscita le due stringhe

8610396351906b395de49dccc7470ebf
8610396351906b395de49dccc7470ebf

corrispondenti rispettivamente ai miei due file di partenza File_A1.pdf e File_A2.pdf. Le due stringhe sono identiche e quindi, come sappiamo, anche i file controllati sono identici (ovviamente usando altri file le stringhe di output saranno differenti da queste).

Si noti che ho preferisco usare l’opzione -q (quiet) per evitare che il comando md5 stampi il percorso completo dei file controllati, che rende molto più complicato trovare a prima vista la stringa di hash. Provare per credere.

Duplichiamo ancora il file File_A1.pdf, rinominandolo questa volta come File_B.pdf. Lanciamo Anteprima ed apriamo il file File_B.pdf. Nelle ultime versioni di OS X Anteprima permette di modificare (parzialmente) il testo dei file pdf o di aggiungere evidenziazioni al testo. Per farlo, basta premere l’icona Edit (l’ultima a destra sulla barra degli strumenti) oppure selezionare la voce corrispondente posta nel menu Vista.

Barra degli strumenti di Anteprima

Modifichiamo in qualche modo il file, ad esempio selezionando con un doppio click una parola ed evidenziandola con Strumenti ➔ Annota ➔ Evidenzia il Testo, e salviamo il file modificato.

Torniamo al Terminale ed eseguiamo il comando

$ md5 -q File_A1.pdf File_B.pdf
8610396351906b395de49dccc7470ebf
22908db2457cf64af17c1296cb5f37e1

che ci mostra immediatamente come ora il secondo file sia ora diverso da quello originale. La figura seguente mostra l’esecuzione completa dei comandi ne mio Terminale.

Esecuzione del comando md5 da Terminale

Tre brevi commenti per concludere:

  • Il comando md5 è disponibile di default su OS X (ovviamente!) e su qualunque distribuzione moderna di Linux e Unix, dove però viene generalmente rinominato md5sum. In Windows, invece, si può installare il File Checksum Integrity Verifier (FCIV), uno strumento semi-ufficiale della Microsoft, che permette di calcolare la firma digitale di un file mediante vari algoritmi, fra cui l’md5.

  • La variante md5 -s "Questa e' una stringa" permette di calcolare l’hash di una stringa qualunque, aprendo la porta ad applicazioni nel campo della generazione casuale di password forti a partire da stringhe facilmente memorizzabili.

  • I programmi che trovano automaticamente i file duplicati sull’hard-disk funzionano più o meno su queste basi.

Sabino Maggi
Pubblicato da Sabino Maggi Segui
Commenti

Aggiungi un commento