Quiero basar64 codificar datos para ponerlos en una URL y luego decodificarlos dentro de mi HttpHandler.Código para descodificar/codificar una base64 URL modificada
He encontrado que Base64 Encoding permite un carácter '/' que estropeará mi coincidencia UriTemplate. Luego encontré que existe un concepto de "Base64 modificado para URL" de la wikipedia:
Existe un Base64 modificado para la variante de URL, donde no se usará relleno '=', y '+' y '/' los caracteres de Base64 estándar se reemplazan respectivamente por '-' y '_', por lo que el uso de codificadores/decodificadores de URL ya no es necesario y no tiene impacto en la longitud del valor codificado, dejando la misma forma codificada intacta para usar en bases de datos relacionales , formularios web e identificadores de objeto en general.
Usando .NET Quiero modificar mi código actual de hacer 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, tengo que añadir potencialmente, una o dos caracteres '=' al extremo que se ve un poco más complejo.
Mi lógica de codificación debe 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 la entrada Stackoverflow Guid to Base64 for URL, pero que tiene una longitud conocida y por lo tanto se puede codificar el número de signos igual necesarios al final.
@Kirk: Ajusta mi respuesta con la matemática probad. – AnthonyWJones