Der Unterschied zwischen Hash-Code- und Prüfsummenfunktionen besteht darin, dass sie für unterschiedliche Zwecke entwickelt wurden.
-
Eine Prüfsumme wird verwendet, um herauszufinden wenn etwas an der Eingabe geändert hat.
-
Ein Hash-Code wird verwendet, um herauszufinden wenn etwas an der Eingabe geändert hat und so viel "Abstand" zwischen den einzelnen Hash-Code-Werten wie möglich zu haben.
Außerdem gibt es pourrait Weitere Anforderungen an eine Hash-Funktion, die im Gegensatz zu dieser Regel stehen, sind die Fähigkeit, frühzeitig Bäume/Cluster/Buckets von Hash-Code-Werten zu bilden.
Wenn man dann noch eine gemeinsame anfängliche Randomisierung hinzufügt, erhält man das Konzept für moderne Verschlüsselung/Schlüsselaustausch.
Über Wahrscheinlichkeiten:
Nehmen wir zum Beispiel an, dass sich die Eingabedaten tatsächlich immer ändern (100 % der Zeit). Und nehmen wir an, Sie haben eine "perfekte" Hash-/Prüfsummenfunktion, die einen 1-Bit-Hash-/Prüfsummenwert erzeugt. Daher erhalten Sie für zufällige Eingabedaten in 50 % der Fälle unterschiedliche Hash-/Prüfsummenwerte.
-
Wenn sich genau 1 Bit in Ihren zufälligen Eingabedaten geändert hat, können Sie dies in 100 % der Fälle erkennen, unabhängig davon, wie groß die Eingabedaten sind.
-
Wenn sich 2 Bits in Ihren zufälligen Eingabedaten geändert haben, ist die Wahrscheinlichkeit, eine "Änderung" zu erkennen, durch 2 geteilt, da sich beide Änderungen gegenseitig neutralisieren könnten und keine Hash-/Prüfsummenfunktion erkennen würde, dass sich 2 Bits in den Eingabedaten tatsächlich unterscheiden.
...
Das heißt, wenn die Anzahl der Bits in Ihren Eingabedaten um ein Vielfaches größer ist als die Anzahl der Bits in Ihrem Hash-/Prüfsummenwert, verringert sich die Wahrscheinlichkeit, dass Sie tatsächlich unterschiedliche Hash-/Prüfsummenwerte für unterschiedliche Eingabewerte erhalten, und ist keine Konstante .
4 Stimmen
Die Antworten werden im Folgenden zusammengefasst: Ein Hash-Code reduziert die Eingabe auf eine kleine Zahl, so dass die Wahrscheinlichkeit von Kollisionen minimiert wird. Eine Prüfsumme hingegen reduziert die Eingabe auf eine kleine Zahl, so dass die Wahrscheinlichkeit von Kollisionen minimiert wird. Sie können das eine vom anderen unterscheiden, indem Sie diese Beschreibung beliebig umformulieren.
4 Stimmen
@DanStahlke - Nein, das ist nicht das, was in den Antworten unten steht. Ja, sie reduzieren beide die Eingabe auf eine kleinere Zahl. Aber es gibt viele, viele Möglichkeiten, dies zu tun. Wie wählt man aus, welchen Algorithmus man verwendet? Das hängt von Ihrem Ziel ab. Um die ersten beiden Antworten zusammenzufassen: Der Ziel einer Prüfsumme ist " um die häufigsten Fehler zu erkennen ". Wählen Sie einen Algorithmus, der eine andere Prüfsumme ergibt, je nachdem, welche Fehler in Ihrem Szenario "am häufigsten" auftreten. Wenn Sie sich Sorgen machen, dass ein oder zwei Bits vertauscht werden, können Sie einen Algorithmus wählen, der garantiert Erkennung dieses spezifischen Fehlers! Dies ist ein sehr spezifischer Kompromiss.
1 Stimmen
@DanStahlke - auf der anderen Seite, Hash-Code deckt ein breites Spektrum an möglichen Kompromissen ab. Wenn wir einen Wert meinen, der bei der Erstellung einer Hashtabelle verwendet wird, wissen wir, dass es wird Kollisionen sein, und zwar jede Menge. Dies ist ein ganz anderer Kompromiss (als eine Prüfsumme). Wir versuchen, Kollisionen zu reduzieren im Durchschnitt . Wir übernehmen keine Garantie für irgendetwas. Es kann Eingaben geben, die sich nur um ein Bit unterscheiden, aber denselben Hash ergeben. Das ist völlig in Ordnung, wenn im Durchschnitt erhalten wir eine gute Verteilung der Hash-Werte. Für eine Prüfsumme wäre dies jedoch inakzeptabel.
0 Stimmen
Mehr darüber, wofür Hash-Werte verwendet werden und worauf sie abzielen. .