Un hash crittografico ha diverse proprietà (da Wikipedia):
- è veloce calcolare il valore di hash per qualsiasi messaggio
- non è possibile generare un messaggio dal suo valore di hash tranne che provando tutti i possibili messaggi
- una piccola modifica a un messaggio dovrebbe cambiare il valore dell'hash in modo così estensivo che il nuovo valore di hash appare non correlato con il vecchio valore di hash
- non è possibile trovare due messaggi diversi con lo stesso valore di hash
Una funzione di hash come xxhash non ha bisogno di quelle proprietà - è pensata per cose come le hashtables e invece cerca la velocità pura e una buona distribuzione dei valori.
Una nota: per "è veloce calcolare il valore di hash per ogni messaggio" per un hash crittografico, in realtà significa che è PRATICO piuttosto che veloce. Uno dei problemi con MD5 (che era considerato un hash crittografico, ma ora è considerato non funzionante) è che ha raggiunto il punto in cui il bruto forzare le password brevi è pratico, perché i cluster basati su GPU possono eseguire dieci miliardi di tentativi al secondo. Questo non è tutto ciò che è rotto su MD5 - ci sono anche alcuni attacchi matematici sull'hash, ma non aiuta. Bcrypt / scrypt / SSHA512 sono tutti molto, molto più lenti, ma comunque pratici per l'uso normale.