MatweyCAT
@MatweyCAT
Python Junior Developer

Как из строки сделать UUID (Guid)?

Всем привет. В общем, у меня есть код (не работает правда) который делает из строки массив байтов и скармливает его Guid. Однако Guid это не ест, выдавая исключение:
System.ArgumentException: "Длина байтового массива для GUID должна точно равняться 16 байт."


Вопрос: как сделать байтовый массив из строки, который будет точно равняться 16 байтам?
Также, если это как-то зависит от размера строки, то максимальная длина: 30 символов, а минимальная: 18 (символы могут быть разные).

И вот мой кусок кода:
// using System;
// using System.Text;

static void Main(string[] args)
{
    // Минимальный размер строки в примере не соблюдается.
    string nick = "User:Name";
    byte[] data = Encoding.UTF8.GetBytes(nick);

    Guid sameUuid = new Guid((byte[]) data);
    Console.WriteLine(sameUuid.ToString());
    Console.ReadKey();
}
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега .NET
Токсичный шарпист
Как вариант - можно посчитать md5 от этой строки.

var input = "Строка произвольной длины":
using var md5 = System.Security.Cryptography.MD5.Create();
var inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
var hashBytes = md5.ComputeHash(inputBytes);
var guid = new Guid(hashBytes);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Senior .NET developer
https://ru.wikipedia.org/wiki/MD5
Как уже сказали.
Хм и да если не секрет что вы хотите достичь?

и да этот метод не идеален.
guid генерируется по своему алгоритму, мд5 по своему и возможны коллизии, особенно если вы генерируете guid и другими методами
Ответ написан
Комментировать
Возможно, есть смысл посмотреть в сторону UUID версии 3 или 5
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы