Welchen Prüfsummenalgorithmus sollte ich verwenden?
Ich Baue ein system muss in der Lage sein zu finden, wenn blobs von bytes wurden aktualisiert.
Anstatt zu speichern das ganze blob (Sie können bis zu 5MBs), ich denke, ich sollte berechnen eine Prüfsumme, speichern Sie diese und berechnen Sie die gleiche Prüfsumme ein wenig später, um zu sehen, ob der blog aktualisiert wurde.
Das Ziel ist die Minimierung der folgenden (in dieser Reihenfolge) :
- Größe der Prüfsumme
- Zeit zu berechnen
- Möglichkeit von Kollisionen (2 identische Prüfsummen geschieht, auch wenn der Inhalt geändert wurde).
Ist es akzeptabel, für unser system haben Zusammenstoß nicht mehr als 1/1,000,000. Das Problem ist nicht die Sicherheit, sondern einfach updaten/Fehler-Erkennung, sodass selten Kollisionen sind ok. (Das ist der Grund, warum ich es letzten in die Dinge zu minimieren).
Auch, können wir nicht ändern, die blobs von text selbst.
Natürlich md5
crc
oder sha1
in den Sinn kommen, und wenn ich wollte eine schnelle Lösung, ich würde für ihn gehen. Aber mehr als eine schnelle Lösung, ich bin auf der Suche nach dem, was sein könnte ein Vergleich der verschiedenen Methoden sowie die vor-und Nachteile.
InformationsquelleAutor der Frage Julien Genestoux | 2010-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schlage vor, Sie haben einen Blick auf dieses ALSO SeiteCRC vs MD5/SHA1.
Geschwindigkeit und Kollisionen behandelt dieser andere thread.
Und wie immer Wikipedia ist dein Freund.
Wenn ich die Wahl hätte, es ist eine wichtige Frage zu beantworten: wollen Sie in jedem Fall, dass es keine Probleme gibt - oder zumindest, dass die Wahrscheinlichkeit so gering ist, dass es in der Nähe die chance, dass der Mond kollidiert mit der Erde innerhalb der nächsten 5 Minuten?
Wenn ja, wählen Sie die SHA-Familie.
In deinem Fall würde ich ändern, wie die update-check durchgeführt wird.
Zum Beispiel, eine inkrementelle Zahl könnte im Zusammenhang mit der blob, und gesendet werden, anstatt die hash, die Anfrage für update erforderlich wäre, wenn die Anzahl unterschiedlich ist, auf der anderen Seite. Die Kollisions-Wahrscheinlichkeit, in diesem Fall geht von ~10^-18 ~0 (im Grunde 0 + Fehler Wahrscheinlichkeit )...
Bearbeiten folgenden Kommentare
Fand dieses Algorithmus, Erle-32, das ist gut für lange Nachrichten (MB) mit einem CRC mit 32 bits, also etwa ~1/10^9 (MD5 128 bit lang).
Es ist schnell zu berechnen.
Adler-32. Es gibt einige probieren (link) unten.
InformationsquelleAutor der Antwort Ring Ø
Blake2 ist der Schnellste hash-Funktion, die Sie verwenden können, und das ist vor allem verabschiedet:
Gewinner des SHA-3-Wettbewerb wurde Keccak-Algorithmus, ist aber noch nicht eine beliebte Umsetzung ist nicht verabschiedet standardmäßig in der GNU/Linux-Distributionen. Stattdessen Blake2 das war ein SHA-3-Wettbewerb Kandidat ist schneller als Keccak und ist Teil GNU coreutils. Damit Sie auf GNU/Linux-distribution, die Sie verwenden können
b2sum
zu verwenden Blake2 hash-Algorithmus.InformationsquelleAutor der Antwort noraj