Eine Prüfsumme ist einfach eine Zahl, die aus dem Datenfeld durch oring (durch logische Addition, also Summe) erzeugt wird. Die Prüfsumme ist in der Lage, eine Verfälschung eines beliebigen Bits oder einer beliebigen Anzahl von Bits innerhalb des Datenfeldes, aus dem sie generiert wurde, zu erkennen, d. h. sie prüft auf Fehler, kann diese aber nicht korrigieren. Eine Prüfsumme ist ein Hash, weil die Größe der Prüfsumme kleiner ist als die der Originaldaten. Ja, es gibt Kollisionen, weil die Prüfsumme überhaupt nicht auf die Bitposition im Datenfeld reagiert.
Eine zyklische Redundanzprüfung (CRC) ist etwas ganz anderes, komplexer und wird NICHT als Prüfsumme bezeichnet. Es handelt sich um die Anwendung einer Polynomreihe, die in der Lage ist, eine beliebige Anzahl einzelner fehlerhafter Bits innerhalb des Datenfeldes, aus dem sie erzeugt wurde, zu korrigieren. Die Erstellung eines CRC ergibt eine Zahl, die größer ist als das ursprüngliche Datenfeld (im Gegensatz zur Prüfsumme) - daher der Name mit dem Wort "Redundanz" und der Preis, den Sie für die Fehlerkorrekturfähigkeit zahlen. Ein CRC ist daher KEIN Hash und darf nicht mit einer Prüfsumme verwechselt oder als solche bezeichnet werden, da die Redundanz zwangsläufig die Größe der Originaldaten erhöht.
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. .