Eine akzeptierte Möglichkeit, zwei Hashes von verschiedenen Objekten zu kombinieren, ist die Verwendung von XOR. Dies ist sinnvoll, aber wie im zweiten Kommentar von Thomas Pornin im folgenden Post erwähnt, XOR ist kommutativ, was bedeutet, dass, wenn Sie jedes Element in einer Menge Hash-und kombinieren sie mit XOR, jede Reihenfolge, die Sie tun, wird immer dazu führen die gleiche Hash:Kombinieren von Hashes für eine geordnete Menge
Why is XOR the default way to combine hashes?
Was ist ein guter Weg Hashes zu kombinieren, die Sie Auftrag abhängig sein wollen? Wenn es für die Größe spezifisch ist, was sind einige bekannte Techniken für 32 Bit und für 64 Bit?
Randnotiz, in einem bestimmten Fall habe ich eine Iterationsvariable 'i' von 0 bis zur Anzahl der Elemente. Gibt es eine gute Möglichkeit, 'i' zu verwenden, um einen auftragsabhängigen Hash zu erstellen? – Trevor
Wenn Sie eine Reihenfolge festlegen möchten, können Sie die Teilhashes drehen (* nicht * verschieben), bevor Sie sie in das Aggregat kopieren. Dies kann natürlich Kollisionen verursachen (wie H (ABCD) == H (DABC)), aber das ist ein Teil des Spiels ... – wildplasser
Im Moment mache ich etwas Dummes, wo ich 'ich' mit einer riesigen Primzahl multipliziere und xor das mit dem Hash für jedes Element. Es gibt Ordnung, aber ich bin definitiv kein Experte und ich habe keine Ahnung, ob das zu größeren Kollisionen führen würde. – Trevor