2016-06-17 13 views
-1

Angenommen, ich habe eine Zeichenfolge, etwa "70c3bdc5ceeac673". Ist es in C# möglich, basierend auf dieser Zeichenfolge eine GUID-ähnliche Struktur zu erstellen (DB-Spalte akzeptiert nur Uniqueidentifier)? Das Ziel wäre, dass der gleiche Guid oder einzigartige Stich jedes Mal erstellt wird, wenn ich diesen Wert übergebe. Ich denke im Wesentlichen wie ein Hmac SHA1 Hash mit einem Schlüssel.Erstellen Sie eine konsistente GUID oder einen eindeutigen Bezeichner aus einer Zeichenfolge

+0

Mögliche Duplikat von [C# guid und SQL unique] (http: // Stackoverflow .com/questions/1435908/c-sharp-guid-and-sql-uniqueidentifier) ​​ – Jaycee

+0

@Jack Diese Antwort ist über das Erstellen einer Speicher-Guids in SQL-Server, ich habe keine Probleme damit, aber ich muss in der Lage sein, das gleiche zu erstellen exakte Guid basierend auf der '70c3bdc5ceeac673' Zeichenfolge. Grundsätzlich als Form der Verschlüsselung. –

+0

Die Klasse "Guid" hat einen Konstruktor, der eine Zeichenfolge verwendet. Sie müssen nur ein Schema für das Erweitern der Eingaben erstellen, die zu kurz sind: Ihr Beispiel hat nur 64 Bits, während eine GUID 128 benötigt. Vielleicht verstehe ich die Frage falsch? –

Antwort

4

Erstellen Guid von SHA256 Hash scheint wie eine einfache Option:

var guid = new Guid(
    System.Security.Cryptography.SHA256.Create() 
     .ComputeHash(Encoding.UTF8.GetBytes("70c3bdc5ceeac673")).Take(16).ToArray()); 

-Code verwirft die Hälfte der Hash-Ergebnis, aber nicht an der Tatsache ändern, dass die gleiche Zeichenfolge immer auf die gleiche Guid umgewandelt wird.

Alternativ kann je nach Ihren Anforderungen nur die Umwandlung von String in Byte-Array und das Auffüllen mit 0/Entfernen von Extra reichen.

+0

Das kann was ich brauche. Die anfängliche Zeichenfolge wird eine Geräte-UUID sein, solange diese Zeichenfolge immer in die gleiche GUID umgewandelt wird, die alles sein sollte, was ich brauche. Ich werde es ausprobieren. –

-1

Wenn Sie wissen, dass alle Ihre Saiten sind innerhalb von 16 nicht-weiten Zeichen (wie 70c3bdc5ceeac673), können Sie diese verwenden:

// value is your string 

var bytes = new byte[16]; 
Encoding.UTF8.GetBytes(value, 0, value.Length, bytes, 0); 
var guid = new Guid(bytes); 
Verwandte Themen