¿Cómo decodifico una cadena codificada en base64?

258

Estoy tratando de "decodificar" esta siguiente cadena Base64:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Esto es lo que sé sobre la cadena en sí:

  1. La cadena original se pasa primero por el siguiente código:

    private static string m000493(string p0, string p1)
    {
        StringBuilder builder = new StringBuilder(p0);
        StringBuilder builder2 = new StringBuilder(p1);
        StringBuilder builder3 = new StringBuilder(p0.Length);
        int num = 0;
    Label_0084:
        while (num < builder.Length)
        {
            int num2 = 0;
            while (num2 < p1.Length)
            {
                if ((num == builder.Length) || (num2 == builder2.Length))
                {
                    MessageBox.Show("EH?");
                    goto Label_0084;
                }
                char ch = builder[num];
                char ch2 = builder2[num2];
                ch = (char)(ch ^ ch2);
                builder3.Append(ch);
                num2++;
                num++;
            }
        }
        return m0001cd(builder3.ToString());
    }
    

    Se p1supone que la parte del código es la cadena " _p0lizei.".

  2. Luego se convierte en una cadena Base64 con el siguiente código:

    private static string m0001cd(string p0)
    {
        string str2;
        try
        {
            byte[] buffer = new byte[p0.Length];
            str2 = Convert.ToBase64String(Encoding.UTF8.GetBytes(p0));
        }
        catch (Exception exception)
        {
            throw new Exception("Error in base64Encode" + exception.Message);
        }
        return str2;
    }
    

La pregunta es, ¿cómo decodifico la cadena Base64 para poder averiguar cuál es la cadena original?

Rickard
fuente
1
Sé que "Por qué" es generalmente irrelevante cuando se admiten cosas heredadas, pero necesito saber ... ¿Por qué se codificó la cadena original Base64 en primer lugar? Base64 generalmente se usa para convertir binarios en una versión portátil basada en texto para incrustar en XML o JSON, posiblemente para moverse a través de una capa de servicio web, no para convertir cadenas en cadenas codificadas.
barrypicker
@barry: para responder a su antigua pregunta en una publicación aún más antigua ... Llegué aquí porque necesito lidiar con el Encabezado de autorización HTTP que requiere una cadena codificada en base64
freefaller

Respuestas:

646

Sencillo:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);
Matthew Abbott
fuente
18
Para completar esta respuesta, Jerry Nixon tiene una gran publicación sobre esto.
orad
44
y no te olvides de agregar espacio de nombres 'usando System.Text'
Eklavyaa
86

El m000493método parece realizar algún tipo de cifrado XOR. Esto significa que se puede usar el mismo método para cifrar y descifrar el texto. Todo lo que tienes que hacer es revertir m0001cd:

string p0 = Encoding.UTF8.GetString(Convert.FromBase64String("OBFZDT..."));

string result = m000493(p0, "_p0lizei.");
//    result == "gaia^unplugged^Ta..."

con return m0001cd(builder3.ToString());cambiado a return builder3.ToString();.

dtb
fuente
Gracias, esta fue solo la respuesta que estaba buscando. Estuve cerca de tirar de mi cabello: p
Rickard
48
@ Rickick: puede "aceptar" una respuesta que resuelva su problema haciendo clic en la marca de verificación junto a la respuesta en el lado izquierdo.
dtb
3
No se refiera a nada de esto como "cifrado" o "descifrado". Haga un punto para distinguir entre "cifrado" y "codificación".