2008-09-17 11 views
4

Ich frage mich, was in die Erstellung einer GUID eingeht. Ich meine nicht, was verwendet wird, um eine GUID in einer bestimmten Sprache zu erstellen (NewID() in SQL Server, Guid.NewGuid() in C#), ich meine, wenn Sie diese Methoden/Funktionen aufrufen, was machen sie zu machen GUID?GUID Hinter den Kulissen

+0

Suchst du etwas mehr als [Wikipedia] (http://en.wikipedia.org/wiki/Globally_Unique_Identifier)? – Karg

Antwort

2

Die Details der GUIDs, einschließlich des Algorithmus, der zu ihrer Generierung verwendet wird, sind unter wikipedia beschrieben.

3

Auch RFC 4122 (auf die im Wikipedia-Artikel verwiesen wird) beschreibt, wie GUIDs erstellt werden sollten.

0

Ein Wort der Warnung, dass ein sehr großer Teil dessen, was Sie im Internet über die GUID-Erstellung lesen, möglicherweise falsch oder zumindest veraltet für Ihre spezifische Plattform ist.

Ich habe einmal durch einen Haufen Windows-Code, um ein Argument über die GUID-Erstellung auf WinXP zu lösen. Leider stellte sich heraus, dass ich falsch lag (d. H. Ich verlor das Argument), aber auch Larry Osterman, also fühlte ich mich etwas besser.

1

Kurz gesagt, es ist überhaupt nicht kompliziert. (oder UUID) Version 4 (aktuell) ist eine teilweise Zufallszahl, schlicht und einfach (122 von 128 Bits sind zufällig, der Rest wird zum Speichern von Version und Revision verwendet). Der Trick ist, dass die möglichen Werte dieser Anzahl sind so viele, dass die Wahrscheinlichkeit eines Treffers für die meisten praktischen Zwecke Null ist.

+0

Ich würde sagen, dass es sich um eine teilweise Zufallszahl handelt. Einige Teile davon sind überhaupt nicht zufällig. – EBGreen

+0

Einige der Bits werden aus den Maschineninformationen erstellt und ändern sich nicht so lange wie Sie auf demselben Computer sind. –

0

Es gibt fünf offizielle Möglichkeiten, um GUIDs (und sicherlich viele inoffizielle) zu generieren.

  • Version 1 ist eine zeitbasierte GUID, die normalerweise MAC-Adressen der primären Netzwerkkarte verwendet, die zum Berechnen der GUID verwendet wird. Dies wird normalerweise aufgrund von Datenschutzproblemen nicht verwendet, aber ich glaube, dass Microsoft SQL Server ab 2005 eine modifizierte Version dieser Version verwenden (mit der Behauptung, Version 14 zu sein), um sequentielle GUIDs zu erstellen, die für IDs in einer Datenbank nützlich sind Datenblöcke (NewSequentialId()).

  • Version 2 ist DCE Security-Version. Ich habe nie diese Art von GUID gefunden, aber ich habe auch nicht viel mit POSIX gearbeitet und es scheint eine Verbindung zwischen Version 2 GUIDs und POSIX zu geben.

  • Version 3 ist eine "namenbasierte" Version, was bedeutet, dass Sie einen Text aufnehmen und eine GUID-Darstellung für einen Namespace erstellen können. Version 3 verwendet einen MD5-Hashalgorithmus. Siehe auch Version 5.

  • Version 4 ist im Grunde eine Zufallszahl GUID. Die Zufallszahl ist vom Sequrity-Level, nicht nur von Ihrem durchschnittlichen Zufallszahlengenerator. Dies ist die Version, die normalerweise in der heutigen Welt verwendet wird. Die C# Guid.NewGuid() verwendet diese Version laut Microsoft-Dokumentation. Auch die normale Funktion zum Erzeugen eines eindeutigen Identifikators in MS SQL Server (NewId()) erzeugt eine GUID der Version 4.

  • Version 5 ist wie Version 3, verwendet aber stattdessen einen SHA-3 Hashing-Algorithmus. Die extended guid C# project verwendet den Version 5-Algorithmus.

  • Für eine Implementierung von GUID-Erstellung würde ich empfehlen, das erweiterte GUID-Projekt zu betrachten. Wie viele gezeigt haben, gibt die RFC 4122 eine detaillierte Beschreibung, wie alle fünf Algorithmen funktionieren. Es gibt jedoch keine Garantie, dass alle Implementierungen korrekt sind.

    Verwandte Themen