Autore Topic: MD5  (Letto 1482 volte)

Offline Phoenix

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
MD5
« il: 10 Dicembre 2008, 01:37:43 »
Salve a tutti, è da pochi giorni che mi sono avvicinato a gambas (2 giorni) e vorrei saper come cryptare una parola o frase in MD5.

Ho attivato il componente gb.crypt e letto la spiegazione su http://gambasdoc.org/help/comp/gb.crypt/crypt/_call?it ma sinceramente non ho capito come proseguire, qualcuno sarebbe così gentile da farmi uno schemino pratico?

Grazie

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: MD5
« Risposta #1 il: 10 Dicembre 2008, 10:40:36 »
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:
Codice: [Seleziona]
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:
Codice: [Seleziona]

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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Phoenix

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: MD5
« Risposta #2 il: 10 Dicembre 2008, 12:32:24 »
Magnifico! Grazie per la rapidità e la completezza della risposta.

  • Visitatore
Re: MD5
« Risposta #3 il: 27 Gennaio 2009, 19:03:29 »
Registrarsi giusto solo per pubblicare il link ad un sito esterno non mi sembra proprio corretto.
Messaggio cancellato. :nono: