online convert base64binary c# encoding base64

c# - convert - encode online



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

Aquí hay otro método para decodificar una base64 segura para la url que se codificó de la misma manera con Marc. Simplemente no entiendo por qué 4-length%4 funcionó (lo hace).

De la siguiente manera, solo la longitud de bits del origen es múltiplo común de 6 y 8, base64 no agrega "=" al resultado.

1 2 3 4 5 6 7 8|1 2 3 4 5 6 7 8|1 2 3 4 5 6 7 8 1 2 3 4 5 6|1 2 3 4 5 6|1 2 3 4 5 6|1 2 3 4 5 6 "==" "="

Entonces, podemos hacerlo a la inversa, si la longitud del bit del resultado no puede dividirse entre 8, se ha agregado:

base64String = base64String.Replace("-", "+").Replace("_", "/"); var base64 = Encoding.ASCII.GetBytes(base64String); var padding = base64.Length * 3 % 4;//(base64.Length*6 % 8)/2 if (padding != 0) { base64String = base64String.PadRight(base64String.Length + padding, ''=''); } return Convert.FromBase64String(base64String);

Quiero lograr la codificación segura de la URL Base64 en C #. En Java, tenemos la biblioteca común de Codec que me da una cadena codificada segura de URL. ¿Cómo puedo lograr lo mismo usando C #?

byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode"); string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);

El código anterior lo convierte a Base64, pero rellena == . ¿Hay alguna manera de lograr la codificación segura de URL?


Basado en las respuestas aquí con algunas mejoras en el rendimiento, hemos publicado una implementación de base64 url ​​segura muy fácil de usar para NuGet con el código fuente disponible en GitHub (licencia MIT).

El uso es tan fácil como

var bytes = Encoding.UTF8.GetBytes("Foo"); var encoded = UrlBase64.Encode(bytes); var decoded = UrlBase64.Decode(encoded);


Es común simplemente cambiar el alfabeto para su uso en urls, por lo que no es necesario codificar en%; 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 relleno: simplemente elimínalo (the = ); puede inferir la cantidad de relleno necesaria. En el otro extremo: simplemente invierta el proceso:

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

con:

static readonly char[] padding = { ''='' };

y para revertir:

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 usa la "biblioteca común de códecs"? Sin duda, sería una primera prueba razonable: este es un enfoque bastante común.



Puede 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!");


Usando el motor criptográfico de Microsoft en UWP.

uint length = 32; IBuffer buffer = CryptographicBuffer.GenerateRandom(length); string base64Str = CryptographicBuffer.EncodeToBase64String(buffer) // ensure url safe .TrimEnd(''='').Replace(''+'', ''-'').Replace(''/'', ''_''); return base64Str;


Use System.Web.HttpServerUtility.UrlTokenEncode (bytes) para codificar, y System.Web.HttpServerUtility.UrlTokenDecode (bytes) para decodificar.