base64でエンコードされた文字列をデコードするにはどうすればよいですか?


258

次のBase64文字列を「デコード」しようとしています。

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhFFVIAUNVFFVYUNFVFUNVFUNVFUNVWFFVIAUNVWFFYIBFVFUNVWFFYIBFVYUFWYFWVFUNVWFFYIBFVYUFWVFUNVWUNFWIBFVYUFWVFUNYWWFFYIBFVYUNFWVFUNY

これは文字列自体について私が知っていることです:

  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に埋め込むためにバイナリをテキストベースのポータブルバージョンに変換するために使用されます。文字列をエンコードされた文字列に変換するためではなく、おそらくWebサービスレイヤーを移動するために使用されます。
バリーピッカー14

@barry -私が対処する必要があるため、さらに古いポスト上の古い質問に答えるために...私はここに来たHTTP認証ヘッダー base64でエンコードされた文字列が必要
freefaller

回答:


646

シンプル:

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

18
この回答を完了するために、Jerry Nixonはこれについて素晴らしい投稿をしています。
orad

4
名前空間 'using System.Text'を追加することを忘れないでください
Eklavyaa

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
リッカード2011

48
@リッカード:左側の回答の横にあるチェックマークをクリックすると、問題を解決する回答を「受け入れる」ことができます。
dtb 2011

3
これを「暗号化」または「復号化」と呼ばないでください。「暗号化」と「エンコード」を区別するようにしてください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.