ฉันจะถอดรหัสสตริงที่เข้ารหัส 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 Authorization Headerซึ่งต้องใช้สตริงที่เข้ารหัส 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
Rickard

48
@Rickard: คุณสามารถ "ยอมรับ" คำตอบที่ช่วยแก้ปัญหาของคุณโดยคลิกเครื่องหมายถูกที่อยู่ถัดจากคำตอบทางด้านซ้าย
dtb

3
โปรดอย่าอ้างถึงสิ่งนี้ว่า "เข้ารหัส" หรือ "ถอดรหัส" ทำให้เป็นจุดที่แยกความแตกต่างระหว่าง "การเข้ารหัส" และ "การเข้ารหัส"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.