Ich suche einen 32-Bit-Hash einiger Datenobjekte zu erstellen. Da ich keine eigene Hash-Funktion schreiben möchte und MD5 verfügbar ist, besteht meine derzeitige Vorgehensweise darin, die ersten 32 Bits (d. H. Die ersten 8 Hex-Ziffern) von einem MD5-Hash zu verwenden. Ist das akzeptabel?Sind die ersten 32 Bits eines MD5-Hashs genauso "zufällig" wie jede andere Teilkette?
Mit anderen Worten, sind die ersten 32 Bits eines MD5-Hash genau so "zufällig" wie jeder andere Teilstring? Oder gibt es einen Grund, warum ich sagen würde, die letzten 32 Bits? oder vielleicht die vier 32-Bit-Teilstrings XOR-Verknüpfung?
Einige preemptive Präzisierungen:
- Diese Hashes brauchen nicht kryptographisch sicher zu sein.
- Ich bin nicht mit der Leistung von MD5 betroffen - es ist mehr als schnell genug für meine Bedürfnisse.
- Diese Hashes müssen nur "zufällig" genug sein, dass Kollisionen selten sind.
- In diesem System sollte die Anzahl der Elemente 10.000 nicht überschreiten (realistisch wird es wahrscheinlich nicht halb so hoch werden). Im schlimmsten Fall sollte also die Wahrscheinlichkeit, dass überhaupt Kollisionen auftreten, bei etwa 1% liegen (vorausgesetzt, es wurde ein ausreichend "zufälliger" Hash gefunden).
haben Sie bereits einen MD5-Hash berechnet? (z. B. als Teil der Metadaten eines Subversion-Checkins) oder müssen Sie den MD5-Hash selbst berechnen? Wenn letzteres, ich stimme mit @Johannes Kommentar, CRC32 wäre viel einfacher. –
Anscheinend gibt es keine Möglichkeit auf SO, präventiv die "Ihre Frage ist ungültig, weil Sie es stattdessen tun sollten" Kommentare ... – Kip
Sorry, ich wollte nicht * nicht * MD5-Hash verwenden, ich einfach bedeuten, ein CRC32 ist einfacher. Sie oder Ihre Kunden sind die einzigen, die beurteilen können, welche Algorithmen Ihren Anforderungen entsprechen. –