Quero codificar os dados em base64 para colocá-los em uma URL e, em seguida, decodificá-los no meu HttpHandler.
Eu descobri que a codificação Base64 permite um caractere '/' que bagunçará a correspondência do meu UriTemplate. Então descobri que existe um conceito de "Base64 modificada para URL" da wikipedia:
Existe uma base64 modificada para a variante de URL, onde nenhum preenchimento '=' será usado, e os caracteres '+' e '/' do Base64 padrão são substituídos respectivamente por '-' e '_', de modo que usando codificadores / decodificadores de URL não é mais necessário e não tem impacto sobre o comprimento do valor codificado, deixando a mesma forma codificada intacta para uso em bancos de dados relacionais, formulários da web e identificadores de objeto em geral.
Usando o .NET, quero modificar meu código atual de codificação e decodificação básicas em base64 para o método "base64 modificada para URL". Alguém já fez isso?
Para decodificar, eu sei que começa com algo como:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Mas, eu preciso adicionar potencialmente um ou dois caracteres '=' ao final, o que parece um pouco mais complexo.
Minha lógica de codificação deve ser um pouco mais simples:
// 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('/', '_');
Eu vi o Guid para Base64 para a entrada URL StackOverflow, mas isso tem um comprimento conhecido e, portanto, eles podem codificar o número de sinais de igual necessários no final.