Un hash criptográfico tiene varias propiedades (de Wikipedia):
- es rápido calcular el valor de hash para cualquier mensaje dado
- no es posible generar un mensaje a partir de su valor hash, excepto al intentar todos los mensajes posibles
- un pequeño cambio en un mensaje debería cambiar el valor de hash de manera tan extensa que el nuevo valor de hash no esté correlacionado con el valor de hash antiguo
- no es factible encontrar dos mensajes diferentes con el mismo valor hash
Una función hash como xxhash no necesita esas propiedades, está diseñada para cosas como tablas hash y, en cambio, busca una gran velocidad y una buena distribución de valores.
Una nota: por "es rápido calcular el valor de hash para cualquier mensaje" para un hash criptográfico, realmente significa que es PRÁCTICO en lugar de rápido. Uno de los problemas con MD5 (que se consideraba un hash criptográfico, pero ahora se considera roto) es que ha llegado al punto en el que la bruta de forzar contraseñas cortas es práctica, porque los grupos basados en GPU pueden hacer diez mil millones de intentos por segundo. Eso no es todo lo que se rompe con el MD5, también hay algunos ataques matemáticos en el hash, pero no ayuda. Bcrypt / scrypt / SSHA512 son mucho, mucho más lentos, pero siguen siendo prácticos para el uso normal.