L'
MD5 non è un cifrario ma una
funzione crittografica di hash, vale a dire che non è una funzione bidirezionale per cui puoi cifrare e decifrare del testo ma serve solo ad ottenere da un testo di lunghezza arbitraria una stringa di lunghezza fissa.
Una funzione di hash deve avere come caratteristica la
non invertibilità, vale a dire che deve essere altamente difficile, se non impossibile, recuperare il testo di partenza avendo solo il valore di hash; deve inoltre generare risultati il più possibile
univoci, vale a dire che la probabilità che due messaggi differenti (anche in 1 solo bit) diano la stessa somma hash sia la più bassa possibile.
Proprio per queste due proprietà, in genere una funzione di hash è utilizzata per 2 scopi:
1) memorizzare delle password su un computer;
2) generare somme di controllo.
Per il punto 1), è facile capire che si può memorizzare la password di accesso ad un programma anche registrandola in un file di testo accessibile da chiunque, condidando nella non invertibilità della funzione di hash. Si usa nel punto 2) una funzione di hash come somma di controllo per verificare che un file sia arrivato integro (basta 1 solo bit di differenza che la somma cambia completamente).
Detto questo, un possibile utilizzo è appunto questo:
1) crei un programma che richiede l'autenticazione per l'utilizzo;
2) ad ogni utente chiedi di inserire una password e poi memorizzi la coppia nome_utente|password in un semplice file di testo con il nome_utente in chiaro e la password salvata come somma hash;
3) al login, ricalcoli l'hash della password inserita dall'utente e controlli se il valore ottenuto è identico a quello memorizzato. Basta appunto la differenza di un solo bit o di un solo carattere anche in una sequenza molto lunga che le due somme risultano completamente differenti. In caso di uguaglianza, puoi star certo che l'utente ha digitato la password corretta.
Veniamo adesso al componente di Gambas. Questa è la sintassi della funzione
crypt.md5:
MD5 (Password AS String [, Prefix AS String ]) AS String
Password è il testo di cui vuoi calcolare l'hash,
Prefix è una specie di
nonce, aggiunto in modo tale che uno stesso testo non dia mai la stessa somma di controllo a meno di non usare lo stesso nonce.
Nel caso tu voglia usare l'MD5 come somma di controllo o per memorizzare una password, devi allora usare lo stesso valore per Prefix.
Quindi, una possibile implementazione può essere:
Nonce = "01234567"
HashMD5.Text = Crypt.MD5(TestoChiaro.Text, Nonce)
nel caso tu voglia avere lo stesso hash. Puoi comunque anche sostituire Nonce con un valore casuale che puoi passare manualmente al programma, in modo da aumentare la sicurezza dell'hash calcolato.