Lo scopo di questo articolo è motrare come si può ottenere l'hash di un qualsiasi file (ad esempio un immagine) in PHP. Di per se può sembrare totalmente inutile avere una stringa criptata che fa riferimento a un file, dato che di per sè è invertibile e quindi non potremmo tornare al file di partenza.

Tuttavia leggendo qua e la per la rete, ho trovato un sito, non mi ricordo sinceramente dove e non ce l'ho sottomano, che parlava di un trucchetto, di per sè banalissimo, per ottenere una password breve, facile da ricordare ma soprattutto sempre ottenibile.

Questo trucchetto consisterebbe nello scegliere un file, magari un'immagine o quello che sia (il sito citava "a noi cara" :)) ) e prendere ad esempio le prime 6 lettere o le prime 3 e le ultime tre... insomma vedete voi. In tal modo avremmo una passowrd un po' "fuori dal comune" ma allo stesso tempo facile da ricordare (perchè anche se costituita da caratteri "strani" comunque molto breve) e anche se la memoria non fosse il nostro forte, sempre ricalcolabile a partire dal file.

Cosicchè ho deciso di mostrare un piccolissimo esempio di come attraverso sole tre righe di PHP si possa ottenere tutto questo. Scrivo il codice poi commento:

$file = fopen('file.jpg','r');
$size = filesize('file.jpg');
echo md5(fread($file,$size)); 

spiego: la prima riga semplicemente alloca alla variabile $file la risorsa del file che ci interessa (al posto di file.jpg ovviamente metterete il percorso del file che volete "hashare") e apre il file in modalità lettura. La seconda riga semplicemente legge la lunghezza del file sopracitato. La terza riga è il fulcro della nostra operazione: scrive il risultato di due funzioni, una incastrata all'altra:fread legge il file passatogli dal puntatore 0 alla lunghezza $size. md5() semplicemente codifica questa stringa letta dal file in hash md5; echo scrive tutto ciò.

Se volete ottenere l'hash in codifica sha1 non serve altro che modificare l'ultima riga cambiando md5:

echo sha1(fread($file,$size)); 

se volete usare qualsiasi altra codifica, basta utilizzare la stessa operazione...

Spero l'articolo sia stato utile o almeno interessante.