Як розшифрувати кодований рядок base64?


258

Я намагаюся "розшифрувати" наступну рядок Base64:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Це те, що я знаю про саму рядок:

  1. Первісний рядок спочатку передається через наступний код:

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

    p1Частина в коді повинна бути рядок « _p0lizei.».

  2. Потім він перетворюється на рядок Base64 наступним кодом:

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

Питання в тому, як я розшифрувати рядок Base64, щоб я міг дізнатися, що таке початковий рядок?


1
Я знаю, "чому" взагалі не має значення при підтримці застарілих речей, але мені потрібно знати ... Чому в першу чергу було закодовано оригінальний рядок Base64?! ?? Base64 зазвичай використовується для перетворення двійкової в текстову портативну версію для вбудовування в XML або JSON - можливо, для переміщення через рівень веб-сервісу, а не для перетворення рядка в кодований рядок.
barrypicker

@barry - щоб відповісти на ваше старе питання ще на старший пост ... Я потрапив сюди, тому що мені потрібно мати справу з заголовком авторизації HTTP, який вимагає кодованого рядка base64
freefaller

Відповіді:



85

Схоже, m000493метод виконує якесь шифрування XOR. Це означає, що той самий метод може бути використаний як для шифрування, так і для розшифровки тексту. Все, що вам потрібно зробити, це зворотне m0001cd:

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

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

із return m0001cd(builder3.ToString());змінено на return builder3.ToString();.


Дякую, це була лише відповідь, яку я шукав. Я був близький до того, щоб тягнути волосся: p
Рікард

48
@Rickard: Ви можете "прийняти" відповідь, яка вирішує вашу проблему, натиснувши прапорець поруч з відповіддю зліва.
dtb

3
Будь ласка, не посилайтеся ні на що на це як на "шифрування" чи "дешифрування". Поставте крапку для розмежування "шифрування" та "кодування".
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.