Saltar al contenido

¿Cómo lograr la codificación segura de URL Base64 en C#?

Nuestros investigadores estrellas han agotado sus provisiones de café, en su búsqueda a tiempo completo por la resolución, hasta que Lilian halló el arreglo en Gitea por lo tanto en este momento la compartimos contigo.

Solución:

es común a simplemente cambia el alfabeto para usar en URL, de modo que no sea necesaria la codificación %; solo 3 de los 65 caracteres son problemáticos – +, / y =. los reemplazos más comunes son - en lugar de + y _ en lugar de /. En cuanto al acolchado: simplemente quítalo (la =); puedes inferir la cantidad de relleno necesario. En el otro extremo: simplemente invierte el proceso:

string returnValue = System.Convert.ToBase64String(toEncodeAsBytes)
        .TrimEnd(padding).Replace('+', '-').Replace('/', '_');

con:

static readonly char[] padding =  '=' ;

y para invertir:

string incoming = returnValue
    .Replace('_', '/').Replace('-', '+');
switch(returnValue.Length % 4) 
    case 2: incoming += "=="; break;
    case 3: incoming += "="; break;

byte[] bytes = Convert.FromBase64String(incoming);
string originalText = Encoding.ASCII.GetString(bytes);

La pregunta interesante, sin embargo, es: ¿Es este el mismo enfoque que utiliza la “biblioteca de códec común”? Sin duda, sería una primera cosa razonable para probar: este es un enfoque bastante común.

Puedes usar la clase Base64UrlEncoder del espacio de nombres Microsoft.IdentityModel.Tokens.

const string StringToEncode = "He=llo+Wo/rld";

var encodedStr = Base64UrlEncoder.Encode(StringToEncode);
var decodedStr = Base64UrlEncoder.Decode(encodedStr);

if (decodedStr == StringToEncode)
    Console.WriteLine("It works!");
else
    Console.WriteLine("Dangit!");

Otra opción, si está usando ASP.NET Core, sería usar Microsoft.AspNetCore.WebUtilities.WebEncoders.Base64UrlEncode.

Si no está utilizando ASP.NET Core, el WebEncoders fuente está disponible bajo la licencia Apache 2.0.

Reseñas y puntuaciones

Si entiendes que ha sido útil nuestro artículo, nos gustaría que lo compartas con el resto desarrolladores y nos ayudes a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *