Come decodificare una stringa codificata in base64?


258

Sto cercando di "decodificare" questa seguente stringa Base64:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Questo è quello che so della stringa stessa:

  1. La stringa originale viene prima passata attraverso il seguente codice:

    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());
    }

    La p1parte nel codice dovrebbe essere la stringa " _p0lizei.".

  2. Viene quindi convertito in una stringa Base64 con il seguente codice:

    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 domanda è: come posso decodificare la stringa Base64 in modo da poter scoprire qual è la stringa originale?


1
So che "Why" è generalmente irrilevante quando si supporta roba legacy, ma devo sapere ... Perché la stringa originale Base64 è stata codificata in primo luogo?! ?? Base64 viene solitamente utilizzato per convertire i file binari in una versione portatile basata su testo per l'incorporamento in XML o JSON, possibilmente per spostarsi su un livello di servizio Web, non per convertire una stringa in una stringa codificata.
barrypicker

@barry - per rispondere alla tua vecchia domanda su un post ancora più vecchio ... Sono arrivato qui perché devo occuparmi dell'intestazione di autorizzazione HTTP che richiede una stringa codificata base64
caduta libera

Risposte:


646

Semplice:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);

18
Per completare questa risposta, Jerry Nixon ha un ottimo post su questo.
Orad,

4
e non dimenticare di aggiungere lo spazio dei nomi 'using System.Text'
Eklavyaa

86

Il m000493metodo sembra eseguire una sorta di crittografia XOR. Ciò significa che lo stesso metodo può essere utilizzato sia per crittografare che per decrittografare il testo. Tutto quello che devi fare è invertire m0001cd:

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

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

con return m0001cd(builder3.ToString());cambiato in return builder3.ToString();.


Grazie, questa era solo la risposta che stavo cercando. Ero vicino a strapparmi i capelli: p
Rickard,

48
@Rickard: puoi "accettare" una risposta che risolva il tuo problema facendo clic sul segno di spunta accanto alla risposta a sinistra.
dtb

3
Si prega di non fare riferimento a nessuno di questi come "crittografia" o "decodifica". Fai in modo di distinguere tra "crittografia" e "codifica".
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.