Ich suche Ratschläge für das Finden oder Erstellen eines Hash-Algorithmus für .Net C#.Wie erstelle ich einen garantierten eindeutigen Hash über eine Sammlung von eindeutigen Strings in .Net?
Ich habe eine Sammlung von Spalten aus einer DB. Die Kombination von Spalten über die Tabelle wird garantiert eindeutige Strings produzieren.
Bedenken Sie:
String Column1 = "StringA";
String Column2 = "StringB";
String Column3 = "StringC";
ich die Spalten in einem einzigen String verketten:
String ColumnKey = Column1 + Column2 + Column3;
Derzeit errichtet in .Net C# Hash-Funktion aus der String-Klasse ich verwende.
Nachdem ich etwas gelesen habe, verstehe ich, dass (obwohl die Wahrscheinlichkeit ziemlich niedrig ist) dieser Algorithmus keine Eindeutigkeit garantiert. Es ist auch mein Verständnis, dass diese Funktion unterschiedliche Ergebnisse für die gleiche Zeichenkette über verschiedene Versionen des .Net-Frameworks erzeugen kann.
Ich bin auf der Suche nach einem anderen Hash-Algorithmus zu verwenden, die Eindeutigkeit garantieren und konsistente Ergebnisse über verschiedene Versionen von .Net produzieren würde.
Kann mir jemand helfen, mich in die richtige Richtung zu bringen?
Sie können nicht. Sie können einfach keine mögliche Zeichenfolge in eine 32-Bit-Ganzzahl laden und die Eindeutigkeit garantieren. – itsme86
Verwenden Sie einen der Standard-SHA-Algorithmen. Aber 32 Bits sind zu niedrig für einen Hash, wenn Sie sich Sorgen um die Einzigartigkeit machen. Kein Hash wird die Eindeutigkeit garantieren, aber SHA256 zum Beispiel macht die Wahrscheinlichkeit einer Kollision so gering, dass Sie nicht einmal darüber nachdenken sollten. Dies ist ein gutes Buch, wenn Sie darüber nachdenken möchten: https://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice –
Die Wahrscheinlichkeit von Kollisionen für einen Strings-Hash-Code ist nicht einmal niedrig. Wenn Sie nur ein paar Zehntausende von Datensätzen haben, haben Sie eine Wahrscheinlichkeit von mehreren Prozent, eine Kollision zu haben, und das setzt voraus, dass die Strings gut verteilt sind, basierend auf dem Hash-Algorithmus. – Servy