Ho creato un algoritmo di hash e vorrei testare se è utilizzabile. Cosa devo testare e come?
Ho creato un algoritmo di hash e vorrei testare se è utilizzabile. Cosa devo testare e come?
Risposta breve: dipende da molti fattori.
Non esiste una buona funzione di hash per gli hash universali (anche se esiste una cosa come "hashing universale" ma ha un significato diverso).
A seconda del contesto, diversi criteri determinano la qualità di un hash. Alcune persone potrebbero avere problemi con SHA, tuttavia è un hash crittografico e non lo è Va bene per le tabelle hash che probabilmente intendi.
Risposta più lunga: Ciascuna tabella hash ha requisiti molto specifici, e comunque trovare una buona funzione di hash è difficile perché diversi tipi di dati espongono informazioni diverse che possono essere sottoposte a hash. Come regola generale è bene considerare tutte le informazioni che un tipo sia valido allo stesso modo. Questo non è sempre facile o addirittura possibile. Per ragioni di statistica (e quindi di collisione), è anche importante generare una buona diffusione nello spazio del problema, cioè tutti gli oggetti possibili. Ciò significa che quando numeri di hashing tra 100 e 1050 non va bene lasciare che la cifra più significativa giochi un ruolo importante nell'hash perché per ~ 90% degli oggetti, questa cifra sarà 0. È molto più importante lasciare le ultime tre le cifre determinano l'hash.
Un'altra cosa importante quando le stringhe di hashing è considerare tutti i caratteri (tranne quando è noto in anticipo che i primi tre caratteri di tutte le stringhe saranno uguali: perché sarebbe uno spreco)
Modifica:
1) Solo per eliminare la confusione tra hash e crittografia guarda qui - Differenza fondamentale tra gli algoritmi di hashing e crittografia
2) Anche una buona discussione su - Qual è la differenza tra una funzione hash e una funzione hash crittografica?
Riferimenti per cercare:
Leggi altre domande sui tag testing algorithms hashing