Quiero codificar datos en base64 para ponerlos en una URL y luego decodificarlos dentro de mi HttpHandler.
Descubrí que la codificación Base64 permite un carácter '/' que estropeará mi coincidencia de UriTemplate. Luego descubrí que hay un concepto de "Base64 modificada para URL" de wikipedia:
Existe una variante de Base64 modificada para URL, donde no se usará el relleno '=', y los caracteres '+' y '/' de Base64 estándar se reemplazan respectivamente por '-' y '_', de modo que el uso de codificadores / decodificadores de URL ya no es necesario y no tiene ningún impacto en la longitud del valor codificado, dejando la misma forma codificada intacta para su uso en bases de datos relacionales, formularios web e identificadores de objetos en general.
Usando .NET Quiero modificar mi código actual de hacer la codificación y decodificación básica de base64 a usar el método "base64 modificado para URL". ¿Alguien ha hecho esto?
Para decodificar, sé que comienza con algo como:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Pero, necesito agregar potencialmente uno o dos caracteres '=' al final, lo que parece un poco más complejo.
Mi lógica de codificación debería ser un poco más simple:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
He visto el Guid to Base64 para la entrada URL StackOverflow, pero tiene una longitud conocida y, por lo tanto, pueden codificar la cantidad de signos iguales necesarios al final.