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.