sql >> Base de Datos >  >> NoSQL >> MongoDB

base64 a guid a base64

El orden de los bytes en un GUID no es el mismo que el orden en su ToString() representación en sistemas little-endian.

Debería usar guid.ToByteArray() en lugar de usar ToString().

Y debe usar new Guid(byte[] b) para construirlo, en lugar de $str .

Para expresar esto en C# puro:

public string GuidToBase64(Guid guid)
{
    return System.Convert.ToBase64String(guid.ToByteArray());  // Very similar to what you have.
}

public Guid Base64Toguid(string base64)
{
    var bytes = System.Convert.FromBase64String(base64);
    return new Guid(bytes);  // Not that I'm not building up a string to represent the GUID.
}

Eche un vistazo a la sección "Estructura básica" del artículo GUID en Wikipedia para más detalles.

Verá que la mayoría de los datos se almacenan en endianness "nativo"... que es de donde proviene la confusión.

Para citar:

Editar:

Versión de Powershell:

function base64toguid  
{  
    param($str);  
    $b = [System.Convert]::FromBase64String($str);
    $g = new-object -TypeName System.Guid -ArgumentList (,$b);
    return $g;
}

Como advertencia adicional, opcionalmente puede recortar el "==" del final de la cadena, ya que solo es un relleno (lo que puede ayudar si está tratando de ahorrar espacio).