Base64 kodlu bir dizenin kodunu nasıl çözerim?


258

"Şu Base64 dize kodunu çözmek" çalışıyorum:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Bu dize kendisi hakkında biliyorum:

  1. Orijinal dize ilk önce aşağıdaki koddan geçirilir:

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

    Koddaki p1parçanın " _p0lizei." dizesi olması gerekiyordu .

  2. Daha sonra aşağıdaki kodla Base64 dizesine dönüştürülür:

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

Soru şu ki, orijinal dizenin ne olduğunu bulabilmek için Base64 dizesini nasıl çözebilirim?


1
Biliyorum "Neden" genellikle eski şeyler desteklerken alakasız, ama bilmeliyim ... Neden orijinal dize Base64 ilk etapta kodlanmış?! ?? Base64 genellikle XML veya JSON içine gömmek için ikili metin tabanlı bir taşınabilir sürüme dönüştürmek için kullanılır - muhtemelen bir dize kodlanmış dizeye dönüştürmek için değil, bir web hizmeti katmanında hareket etmek için.
barrypicker

@barry - eski sorunuzu daha eski bir yayında yanıtlamak için ... Base64 kodlu dize gerektiren HTTP Yetkilendirme Başlığı ile uğraşmam gerektiğinden buraya geldim
freefaller

Yanıtlar:


646

Basit:

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

18
Bu cevabı tamamlamak için Jerry Nixon'un bu konuda harika bir yazısı var.
orad

4
ve 'System.Text' kullanarak ad alanı eklemeyi unutmayın
Eklavyaa

86

m000493Yöntem XOR şifreleme çeşit gerçekleştirmek gibi görünüyor. Bu, metnin hem şifrelenmesi hem de şifresinin çözülmesi için aynı yöntemin kullanılabileceği anlamına gelir. Tek yapmanız gereken tersine m0001cd:

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

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

ile return m0001cd(builder3.ToString());değiştirildi return builder3.ToString();.


Teşekkür ederim, bu sadece aradığım cevaptı. Saçımı çekmeye
yakındım

48
@Rickard: Sol taraftaki yanıtın yanındaki onay işaretini tıklayarak sorununuzu çözen bir yanıtı "kabul edebilirsiniz".
dtb

3
Lütfen bunların hiçbirini "şifreleme" veya "şifre çözme" olarak adlandırmayın. "Şifreleme" ile "kodlama" arasında bir ayrım yapılması gerekir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.