Código para decodificação / codificação de um URL base64 modificado
Eu quero codificar dados base64 para colocá-lo em um URL e, em seguida, decodificá-lo dentro do meu HttpHandler.
Eu descobri queCodificação Base64 permite um caractere '/' que irá atrapalhar minha correspondência UriTemplate. Então eu descobri que há um conceito de "Base64 modificado para URL" da wikipedia:
Existe uma Base64 modificada para a variante de URL, onde nenhum preenchimento '=' será usado, e os caracteres '+' e '/' da Base64 padrão serão substituídos respectivamente por '-' e '_', de modo que o uso de 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 objetos em geral.
Usando o .NET Eu quero modificar meu código atual de fazer codificação base básica e decodificação para usar o método "modificado base64 para URL". Alguém já fez isso?
Para decodificar, 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 '=' chars ao final 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 oGuid para Base64 para URL StackOverflow entrada, mas que tem um comprimento conhecido e, portanto, eles podem codificar o número de sinais de igual necessário no final.