Per citare Guidelines and rules for GetHashCode di Eric Lippert:Come posso creare un codice hash in .net (C#) per una stringa che è sicura da memorizzare in un database?
Regola: I consumatori di GetHashCode non possono contare su di esso che è stabile nel tempo o AppDomain attraverso
Supponiamo di avere un oggetto Customer che ha un sacco di campi come Nome, Indirizzo e così via. Se si effettuano due oggetti simili con lo nello stesso dati in due diversi processi, essi non devono restituire lo stesso codice hash allo stesso . Se effettui un tale oggetto su martedì in un unico processo, spegnilo, ed esegui di nuovo il programma su Mercoledì, i codici hash possono essere diversi.
Questo ha morso persone in passato. La documentazione per System.String.GetHashCode osserva espressamente che due identici stringhe possono avere diversi codici hash nelle diverse versioni del CLR, e in effetti lo fanno. Non archiviare gli hash delle stringhe nei database e aspettarsi che siano sempre gli stessi, perché non lo saranno.
Quindi qual è il modo corretto di creare un codice hash di una stringa che posso memorizzare in un database?
(Ti prego, dimmi che non sono la prima persona ad aver lasciato questo bug nel software che ho scritto!)
Bene, non mi fido mai di GetHashCode, perché so, quanto sia sciatta l'implementazione di questo metodo. Credo che gli altri non lo stiano facendo meglio ... ;-) –
Non sei la prima persona che ha lasciato questo bug nel software che hai scritto. – Bobby
I motori Dbase sono già molto bravi con le stringhe di hashing. Basta creare un indice per la colonna. –