Join two Base64 strings and then decode them

2019-07-19 14:30发布

问题:

I'm trying to figure out how to join two strings that are encoded Base64 and then decode and get the combined result.

Example:

string1 Hello --- string1 Base64 SGVsbG8=

string2 World --- string2 Base64 V29ybGQ=

If I join the base64 I get something that wont decode SGVsbG8=V29ybGQ=

I want the result to say: Hello World

I don't want only this example to work but rather something that will work with any string. This is a very simplified problem which is a step on an application I'm trying to write I'm stuck on.

回答1:

I found a best way to do this, add plus between one string and other, and add ONE, and only ONE equals char ('=') at the end of string. The return will be "Hello>World", then remove the ">":

class Program
{
    static void Main(string[] args)
    {
        string base64String = "SGVsbG8+V29ybGQ=";
        byte[] encodedByte = Convert.FromBase64String(base64String);
        var finalString = Encoding.Default.GetString(encodedByte)).Replace(">", " ");
        Console.WriteLine(finalString.ToString());
    }
 }

(Old way) In C# I do something like this:

class Program
{
    static void Main(string[] args)
    {
        string base64String = "SGVsbG8=V29ybGQ=";
        Console.WriteLine(DecodeBase64String(base64String));
        Console.ReadLine();
    }

    public static string DecodeBase64String(string base64String)
    {
        StringBuilder finalString = new StringBuilder();

        foreach (var text in base64String.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries))
        {
            byte[] encodedByte = Convert.FromBase64String(text + "=");

            finalString.Append(Encoding.Default.GetString(encodedByte));
            finalString.Append(" "); //This line exists only to attend the "Hello World" case. The correct is remove this and let the one that will receive the return to decide what will do with returned string.
        }

        return finalString.ToString();
    }
}