Comment décoder une chaîne encodée en base64?

258

J'essaie de "décoder" cette chaîne Base64 suivante:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Voici ce que je sais de la chaîne elle-même:

  1. La chaîne d'origine est d'abord transmise via le code suivant:

    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 p1partie du code est censée être la chaîne " _p0lizei.".

  2. Il est ensuite converti en une chaîne Base64 par le code suivant:

    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 question est de savoir comment décoder la chaîne Base64 afin de savoir quelle est la chaîne d'origine?

Rickard
la source
1
Je sais que "Pourquoi" est généralement hors de propos lors de la prise en charge des éléments hérités, mais je dois savoir ... Pourquoi la chaîne d'origine Base64 a-t-elle été encodée en premier lieu?! ?? Base64 est généralement utilisé pour convertir le binaire en une version portable basée sur du texte pour l'incorporation dans XML ou JSON - éventuellement pour se déplacer à travers une couche de service Web, pas pour convertir une chaîne en chaîne codée.
barrypicker
@barry - pour répondre à votre ancienne question sur un post encore plus ancien ... Je suis arrivé ici parce que je dois gérer l' en-tête d'autorisation HTTP qui nécessite une chaîne encodée en base64
Freefaller

Réponses:

646

Facile:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);
Matthew Abbott
la source
18
Pour compléter cette réponse, Jerry Nixon a un excellent article à ce sujet.
2014
4
et n'oubliez pas d'ajouter un espace de noms 'en utilisant System.Text'
Eklavyaa
86

La m000493méthode semble effectuer une sorte de cryptage XOR. Cela signifie que la même méthode peut être utilisée pour crypter et décrypter le texte. Il vous suffit de renverser m0001cd:

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

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

avec return m0001cd(builder3.ToString());changé en return builder3.ToString();.

dtb
la source
Merci, c'était juste la réponse que je cherchais. J'étais sur le point de me tirer les cheveux: p
Rickard
48
@Rickard: Vous pouvez "accepter" une réponse qui résout votre problème en cliquant sur la coche à côté de la réponse sur le côté gauche.
dtb
3
S'il vous plaît ne faites pas référence à tout cela comme "cryptage" ou "décryptage". Faites une distinction entre "cryptage" et "encodage".