2012-03-26 13 views
7

Estoy tratando de codificar algunas cadenas de la cadena base-64 y estoy teniendo truble para obtener el resultado correcto.Codificando cadenas hacia y desde base-64

string text = base64string.... //Here I have a base-64 string. 
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); 
string base64Encoded = Convert.ToBase64String(encodedByte); 

if (text == base64Encoded) //If the new encoded string is equal to its original value 
    return base64Encoded; 

He intentado hacer esto y parece que no obtengo el resultado correcto. He intentado ambos con System.Text.Encoding.Unicode y System.Text.Encoding.UTF8

¿Cuál podría ser el problema? ¿Alguien tiene una solución adecuada?

+0

Bien leyendo su código, ¿está tomando una cadena base64 y luego codificándola en base64 y luego comparando la cadena codificada con la señal? – Brian

+0

¿Por qué estás comenzando desde el formulario codificado? Podrías intentar primero hacer la codificación de texto plano, luego decodificarla. ¿O está tratando de implementar el algoritmo de codificación/descodificación usted mismo? – Attila

+0

@Brian - Sí eso es lo que estoy haciendo. –

Respuesta

9
string text = base64string.... //Here I have a base-64 string. 
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); 
string base64Encoded = Convert.ToBase64String(encodedByte); 

Usted está codificando dos veces la cadena. Comienza con una cadena base64, obtiene los bytes y luego la vuelve a codificar. Si desea comparar, deberá comenzar con la cadena original.

+0

S - Lo sé. Lo que quiero es codificar una cadena de base 64 a otro formato y luego codificar de nuevo a base-64, solo para ver si el resultado de la codificación no ha perdido ninguno de los datos. Sé que es una operación tonta, pero quiero hacerlo de todos modos. –

+2

@ErikLarsson: Bueno, base64 ya garantiza que no perderá datos, por lo que no veo el punto. Sin embargo, si sabes lo que te estoy diciendo ... entonces, ¿cuál es la pregunta? Obviamente, no obtendrás lo mismo cuando codifiques una cadena una y otra vez.Comience con la cadena original, codifíquela, decodifíquela si realmente desea verificarla. –

6

Si text es una cadena de base-64, entonces usted está haciendo al revés:

byte[] raw = Convert.FromBase64String(text); // unpack the base-64 to a blob 
string s = Encoding.UTF8.GetString(raw); // assume the blob is UTF-8, and 
             // decode to a string 

que le llevará como un string. Sin embargo, tenga en cuenta que este escenario solo es útil para representar texto unicode en formato ascii. Normalmente no codificaría base-64 si el contenido original es string.

0

Tiene el código de codificación correctamente establecido. Para confirmar si la cadena codificado en base 64 es correcta, puede intentar la decodificación y la comparación de los contenidos decodificados a la original:

var decodedBytes = Convert.FromBase64String(base64encoded); 
var compareText = System.Text.Encoding.ASCII.GetString(decodedText); 

if (text == compareText) 
{ 
    // carry on... 
    return base64encoded; 
} 
1

convertir lo que sea que usted necesita en base 64 en una matriz de bytes a continuación, utilizar el FromBase64String y ToBase64String para convertir desde y hacia Base 64:

Byte[] buffer = Convert.FromBase64String(myBase64String1); 
myBase64String2 = Convert.ToBase64String(buffer); 

myBase64String1 será igual a myBase64String2. Deberá usar otros métodos para obtener su tipo de datos en una matriz de bytes y viceversa para recuperar su tipo de datos. Lo he usado para convertir el contenido de una clase en una matriz de bytes y luego en la cadena Base64 y escribir la cadena en el sistema de archivos. Más tarde lo leí en una instancia de clase invirtiendo el proceso.

Cuestiones relacionadas