Wie schreibe ich eine gute Hashfunktion?
Gar nicht … nimm eine bereits implementierte. Eine Hashfunktion neu zu entwickeln und zu implementieren, ist nicht gerade trivial. Da gibt es viele Dinge zu beachten - zwei Stichworte: Lawineneffekt und Kollisionsresistenz. Der Lawineneffekt soll sicherstellen, dass ein geändertes Eingangsbit möglichst viele geänderte Ausgangsbit nach sich zieht. Die Kollisionsresistenz stellt sicher, dass es nicht so einfach möglich ist, mit zwei unterschiedlichen Eingangsdaten die gleichen Ausgangsdaten (= den gleichen Hash) zu erhalten.
Bei der Entwicklung neuer Hashfunktionen zerbrechen sich viele schlaue Leute jahrelang die Köpfe, siehe z.B.
SHA-3 Project - Hash Functions | CSRC
Meine zwei Cent dazu …