Algoritmi md5 (Message Digest 5), sha1 (famiglia hash) e funzione CRC32. Come si usano e a cosa servono.
ALLWEB free
Web Directory Script Linguaggi
Italiano Inglese Tutte
 
 02 Oct 2014
aggiungi in preferiti  
Home    Mappa directory    Script




MD5, SHA1 (hash) e CRC32:

Nell'url, nel titolo, nella descrizione e nelle keywords di questa pagina sono riportati i termini crittografia e cifratura perchè si tende ad associare gli algoritmi di sicurezza con questi termini, solo perchè data una stringa ne troviamo risultante un'altra con significato nullo, ma niente di questo è esatto.

In realtà le funzioni citate non cifrano nessun testo, ma ne forniscono un'impronta, solitamente di 16, 20, 32 o 40 caratteri (dipende dall'impostazione dei parametri delle funzioni) e dagli algoritmi che le formano.

Il risultato ottenuto non potrà MAI essere decifrato, in pratica dato un risultato md5 o sha1 (sha1 è della famiglia hash) non potremo MAI risalire alla parola iniziale; ad eccezione di CRC32 ogni parola lettera od altro che passiamo al loro interno rende un risultato SEMPRE DIVERSO fra loro.

Questa loro caratteristica dota queste funzioni di una sicurezza al momento senza confronti (Apriamo una parentesi per CRC32 a fine pagina).

IMPORTANTE:
MD5 rende un risultato di 32 caratteri (esadecimale) o 16 (binario), mentre SHA1 rende un risultato di 40 caratteri (esadecimale) o 40 (binario).
SHA1 è più sicuro di MD5!!!


Loro applicazione:

L'applicazione di questi algoritmi nel ramo della sicurezza password è fondamentale.
Se un nostro utente inserisce una password elaborata con una di queste funzioni nessuno saprà MAI la vera password, escluso chi la inserisce.
In pratica se l'utente la dimentica o la perde non potremo mai recuperla, dovremo necessariamente sostituirla con una nuova. Questo perchè come abbiamo detto in precedenza nel server del sito sarà memorizzata un "immagine" della password e non la parola della password.

Utilizzando questi algoritmi neppure il webmaster dovrebbe conoscere la password, sempre che non la memorizzi in chiaro appena inserita dall'utente.

E' comunque buona norma utilizzare SEMPRE password diverse fra loro, per scongiurare che il comportamento scorretto di alcuni professionisti web ci possa danneggiare.


Esempio pratico:

Creamo un form per inserire una parola ed elaboriamola con i tre metodi per vedere il codice generato.


Inserisci una frase, parola o numero:


Cliccando 'elabora' troverai il codice di quello inserito elaborato dai tre logaritmi.



FUNZIONI:


MD5:

md5($parola);

md5_file($file); Verisone per file di MD5.


SHA1:

sha1($parola);

sha1_file($file); Versione per file di SHA1.


CRC32:

crc32($parola); Il risultato sarà sempre di 32 bit (anche nagativo).



CRC32:

La funzione CRC32 è una storia a parte, la sua sicurezza non è provata al 100%, e solitamente non si utilizza per le password ma per il trasferimento di informazioni.
Non è certo che le parole generate siano sempre diverse fra loro.

La semplicità del suo algoritmo ed il piccolo risultato (32bit e SEMPRE NUMERICO) di questa funzione potrebbe far nascere delle uguaglianze (collisioni o conflitti) fra i risultati di parole diverse. Qualità (o difetti) che ne scongiurano l'utilizzo ai fini puri di sicurezza (es. password).

In pratica per questioni legate alla sicurezza la funzione CRC32 è da tralasciare a vantaggio degli altri due (MD5 e sopratutto SHA1).

Ad oggi CRC32 è consigliato per verificare il corretto transito di pacchetti di informazioni, in pratica dato un file che vogliamo trasmettere, ne ricaviamo il CRC32 e dopo la trasmissione verifichiamo che il CRC32 ottenuto dal pacchetto trasmesso sia sempre uguale, se si la trasmissione è andata a buon fine.


PARAMETRI MD5 e SHA1:

Per le funzioni MD5 e SHA1 a partire da PHP 5.0.0 esiste un parametro opzionale (in default FALSE) che permette di decidere se il risultato è in formato esadecimale(FALSE) oppure binario(TRUE).

I risultati binari sono meno sicuri perchè più piccoli rispetto ad un formato esadecimale.