2009-07-26 10 views
3

Ich mache eine Website in ASP.NET und möchte in der Lage sein, ein Benutzerprofil zu haben, auf das über eine URL mit der Benutzer-ID am Ende zugegriffen werden kann. Eindeutige Kennung ist offensichtlich eine schlechte Wahl, da sie lang ist und (korrigieren Sie mich, wenn ich falsch liege) nicht wirklich URL-freundlich.Kürzere GUID mit CRC

Ich frage mich, ob ich einen eindeutigen IDnetifier auf der ASP-Seite erstellt und dann mit CRC (oder etwas Ähnliches) hashed, wenn es immer noch so einzigartig (oder sogar einzigartig) wäre wie nur eine GUID.

Zum Beispiel:

Die GUID 6f1a7841-190b-4c7a-9f23-98709b6f8848 gleich CRC E6DC2D44.

Dank

Antwort

11

Ein CRC einer GUID wäre nicht eindeutig, nein. Das wäre ein genialer Komprimierungsalgorithmus, um alles in nur 4 Bytes zu speichern.

Wenn Ihre Benutzer mit einem GUID-Schlüssel in der Datenbank gespeichert sind, haben Sie außerdem Probleme, den Benutzer zu finden, der diesem bestimmten CRC entspricht.

Es wäre besser, eine einfache alte Ganzzahl zu verwenden, um einen Benutzer eindeutig zu identifizieren. Wenn die URL nicht verfügbar sein soll, können Sie sie mit einem zweiten Ticket- (oder Token-) Parameter kombinieren, der zufällig generiert wird. Es muss nicht eindeutig sein, da Sie die Ganzzahl-ID zum Identifizieren des Benutzers verwenden. Sie können es sich mehr oder weniger als Passwort vorstellen.

+0

Das sieht nach der besten Lösung aus. Vielen Dank. – j82374823749

3

Alle berechneten Hash enthält weniger Informationen (Bits) als die Originaldaten und kann niemals als eindeutig sein. Es gibt immer Kollisionen.

+0

einfach nicht wahr. Nehmen wir zum Beispiel MD5. Falls Sie 128bit Eingangsdaten haben, erhalten Sie nach dem Hashing die genaue Anzahl der Bits zurück. Ich komme auch nicht auf die Idee von mehr oder weniger "Einzigartigkeit". Wenn Sie die Eingabedaten - abhängig vom Hashalgorithmus - einfach einschränken, ist jeder mögliche Ausgang eindeutig. – UnclePaul

0

Wenn Sie eine CRC einer UUID/GUID als ID verwenden, könnten Sie auch eine kürzere ID verwenden.

Die Idee einer UUID/GUID als ID ist IMO, dass Sie IDs auf getrennten Systemen erstellen können und keine Probleme mit doppelten IDs haben sollten.

Wie auch immer, wer wird die URL für die Profilseite trotzdem von Hand eingeben?

Auch ich sehe keine Probleme mit der URL-Freundlichkeit einer UUID/GUID - es gibt keine Zeichen, die nicht von http erlaubt sind.

1

Nein, es wird nicht so einzigartig sein, weil Sie Informationen verlieren. Wenn Sie eine 32-stellige hexadezimale Zeichenfolge verwenden und diese in eine hexadezimale Zeichenfolge mit 8 Zeichen konvertieren, verlieren Sie per Definition 75% der Daten.

Sie können mehr Zeichen verwenden, um die Daten darzustellen. Eine GUID verwendet nur 16 Zeichen (Basis 16), sodass Sie eine höhere Basis (z. B. Basis 64) verwenden können, mit der Sie die gleiche Menge an Informationen in weniger Zeichen codieren können.

1

Ich sehe kein Problem mit der normalen GUID in HTTP-URL. Wenn Sie die Kurzform von Guid verwenden möchten, verwenden Sie das folgende.

var gid = Guid.NewGuid().ToString("N"); 

Dies wird eine GUID ohne Bindestrich oder Sonderzeichen geben.

0

Wie werden Benutzer in der Datenbank (oder an einem anderen Ort, an dem Sie Ihre Daten speichern) identifiziert?

Wenn sie identifiziert werden mit dieser GUID Ich würde sagen, Sie haben einen wirklich guten Grund dafür, weil dies die Suche nach einer speziellen ID wirklich kompliziert macht (auch wenn Sie einen Binärbaum verwenden); Es ist auch mehr Speicherplatz erforderlich, um diese Werte zu speichern.

Wenn sie durch einen eindeutigen Integer-Wert identifiziert werden, warum wird dies nicht verwendet, um das Benutzerprofil aufzurufen?

1

Eine GUID ist weltweit einzigartig, was bedeutet, dass Sie hoffentlich nie in Konflikte geraten werden. Diese basieren normalerweise auf einer Art zeitbasierter Berechnung mit zufälliger Verteilung. Wenn Sie etwas mit einem Hash wie zB CRC verkürzen möchten, dann ist die Eindeutigkeit nicht automatisch, sondern solange Sie Ihre Eindeutigkeit selbst verwalten (prüfen, ob der Hash momentan keinem anderen Benutzer zugewiesen ist und wenn ja, bis neu generieren du bekommst einen einzigartigen) dann könntest du fast alles verwenden.

So arbeiten viele URL-Shortener.

2

Wenn die Benutzer einen Benutzernamen haben, warum nicht verwenden? Es sollte einzigartig sein (würde ich hoffen!) Und wäre wahrscheinlich kurz und URL-freundlich. Es ist auch einfach für Benutzer, sich daran zu erinnern, und passt in das ASP.NET-Mitgliedschaftsschema (da Benutzernamen der "Primärschlüssel" in den Mitgliedschaftsanbietern sind). Ich sehe kein Sicherheitsproblem, da (vermutlich) nur authentifizierte Benutzer darauf zugreifen könnten.

+1

Der Benutzername ist elegant, aber Sie haben kein Glück, wenn Sie einen permanenten Link erstellen und die Änderung der Benutzernamen unterstützen möchten. Kleine Designüberlegung. – Thorarin

0

Sie können eine GUID auf 20 druckbare ASCII-Zeichen verkürzen, wobei sie immer noch eindeutig ist und keine Informationen verliert.

Werfen Sie einen Blick auf diesen Blog-Post von Jeff Atwood:
Equipping our ASCII Armor