Wenn von 1 bis X gezählt wird, wobei X die erste Zahl ist, die eine md5-Kollision mit einer vorherigen Zahl hat, welche Zahl ist X?
Ich möchte wissen, ob ich md5 für Seriennummern verwende, wie viele Einheiten ich erwarten kann, bevor ich eine Kollision bekomme.
Theoretisch können Sie Kollisionen für X um 2 64 erwarten. Bei einer Hash-Funktion mit einer Ausgabe von n Bits treten erste Kollisionen auf, wenn Sie etwa 2 n / 2 -Ausgänge angesammelt haben (es spielt keine Rolle, wie Sie die Eingaben wählen; sequentiell ganzzahlige Werte sind in dieser Hinsicht nichts besonderes).
Natürlich wurde MD5 nicht als gute Hash-Funktion gezeigt. Auch ist das 2 n / 2 nur ein Durchschnitt. Also, warum versuchst du es nicht? Nehmen Sie eine MD5-Implementierung, hashen Sie Ihre Seriennummern und sehen Sie, ob Sie eine Kollision bekommen. Eine grundlegende MD5-Implementierung sollte in der Lage sein, einige Millionen Werte pro Sekunde zu hashen, und mit einer vernünftigen Festplatte könnten Sie einige Milliarden Ausgaben sammeln, sortieren und sehen, ob es eine Kollision gibt.
Sie haben eine obere Grenze für Ihre Ordnungszahl N, also nutzen wir das aus. Sagen wir N & lt; 2 32 ≈ 4,3 * 10 10 . Jetzt, jedes Mal, wenn Sie eine neue Kennung benötigen, wählen Sie einfach eine zufällige 32-Bit-Zahl R und verketten sie mit R x oder N (Zero-Pad vor der Verkettung). Dies ergibt eine zufällig aussehende eindeutige 64-Bit-Kennung, die Sie mit nur 16 hexadezimalen Ziffern bezeichnen könnten.
Dieser Ansatz verhindert Kollisionen vollständig, da zwei Identifikatoren, die zufälligerweise die gleiche zufällige Komponente aufweisen, notwendigerweise bestimmte xor-ed Komponenten haben.
Bonus-Feature: Sie können einen solchen 64-Bit-Identifier in zwei 32-Bit-Zahlen aufteilen und sie miteinander verknüpfen, um die ursprüngliche Ordnungszahl wiederherzustellen.
Tags und Links hash md5 collision hash-collision