Originariamente inviato da Alex'87
Ad esempio, non si salva in chiaro una password, ma un suo hash. Quando l'utente vuole accedere si confronta l'hash della password che inserisce con l'hash salvato: se coincidono viene eseguito l'accesso, altrimenti no. Capisci perché le collisioni sono un problema ed è importante avere un algoritmo di hashing fatto bene ^^
Occhio però a non confondere un hash "normale" con un hash crittografico.

Una funzione di hash "normale" serve sostanzialmente per fare confronti rapidi (in cui stabilire velocemente se due stringhe/altri dati sono differenti) e/o come indice in una hashtable; l'hash in questione deve dare poche (idealmente nessuna) collisioni per il set di dati fornito ed essere estremamente veloce da calcolare.

Un hash crittografico, invece, deve dare anche lui dare poche collisioni, ma deve essere invece tendenzialmente lento (per evitare attacchi di bruteforce) e soprattutto deve essere sostanzialmente impossibile da invertire - o comunque, deve essere impossibile generare volontariamente delle collisioni - proprietà che invece è sostanzialmente irrilevante per un hash non crittografico.

Il metodo hashCode non è un hash crittografico (è estremamente veloce ed è facilissimo generare volontariamente delle collisioni), ma un hash da usare in altro genere di algoritmi, ad esempio, appunto, come indice in una hashtable, oppure per un confronto "preliminare" tra moltissime stringhe.