Ich schreibe gerade ein Programm, das vier vorzeichenlose 32-Bit-Ganzzahlen als Ausgabe von einer bestimmten Funktion erzeugt. Ich möchte diese vier Ganzzahlen mit einem Hash versehen, damit ich die Ausgabe dieser Funktion mit zukünftigen Ausgaben vergleichen kann.
Ich habe allerdings Schwierigkeiten, eine anständige Hashing-Funktion zu schreiben. Als ich ursprünglich diesen Code schrieb, warf ich in einer einfachen Addition von jeder der vier ganzen Zahlen, die ich wusste, würde nicht ausreichen. Ich habe verschiedene andere Techniken ausprobiert, wie z. B. das Verschieben und Addieren, ohne Erfolg. Ich erhalte einen Hash, aber er ist von schlechter Qualität, und die Funktion erzeugt eine Menge Kollisionen.
Die Hash-Ausgabe kann entweder eine 32-Bit- oder eine 64-Bit-Ganzzahl sein. Die betreffende Funktion generiert viele Milliarden Hashes, so dass Kollisionen hier ein echtes Problem darstellen, und ich bin bereit, eine größere Variable zu verwenden, um sicherzustellen, dass es so wenige Kollisionen wie möglich gibt.
Kann mir jemand helfen, herauszufinden, wie man eine gute Hash-Funktion schreibt?