2016-06-17 2 views
-1

Скажите, что у меня есть строка, что-то вроде «70c3bdc5ceeac673». Возможно ли в C# создать такую ​​GUID-структуру (DB Column принимает только uniqueidentifier) ​​на основе этой строки? Цель заключалась бы в том, что одно и то же Guid или уникальное sting создается каждый раз, когда я передаю это значение. Я предполагаю, что это похоже на хэш Hmac SHA1 с ключом.Создайте GUID GUID или уникальный идентификатор из строки

+0

Возможный дубликат [C# GUID и SQL UniqueIdentifier] (HTTP: // StackOverflow .com/questions/1435908/c-sharp-guid-and-sql-uniqueidentifier) ​​ – Jaycee

+0

@Jack Этот ответ касается создания хранения команд в sql-сервере, у меня нет никаких проблем с этим, но мне нужно иметь возможность создавать те же точное руководство, основанное на строке '70c3bdc5ceeac673'. В основном это форма шифрования. –

+0

Класс 'Guid' имеет конструктор, который принимает строку. Вам просто нужно придумать какую-то схему для увеличения слишком коротких входных данных: ваш пример имеет только 64 бит, а GUID - 128. Может быть, я не понимаю вопрос? –

ответ

4

Создание Guid из SHA256 хэша показаться простым вариантом:

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

код сбрасывает половину результата хеширования, но это не меняет тот факт, что та же строка всегда преобразованная в тот же Guid.

В качестве альтернативы в зависимости от ваших требований достаточно просто преобразовать строку в массив байтов и заполнить с помощью 0/удаления дополнительного.

+0

Возможно, это то, что мне нужно. Начальная строка будет UUID устройства, если эта строка всегда преобразуется в тот же указатель, который должен быть всем, что мне нужно. Я проверю это. –

-1

Если вы знаете, что все строки в пределах 16 без широких символов (как 70c3bdc5ceeac673), вы можете использовать это:

// value is your string 

var bytes = new byte[16]; 
Encoding.UTF8.GetBytes(value, 0, value.Length, bytes, 0); 
var guid = new Guid(bytes); 
Смежные вопросы