将两个Base64字符串连接起来,然后解码它们。

5

我正在尝试想出如何连接两个Base64编码的字符串并解码得到合并后的结果。

示例:

字符串1 Hello --- 字符串1 Base64 SGVsbG8=

字符串2 World --- 字符串2 Base64 V29ybGQ=

如果我连接这两个Base64编码的字符串,得到的结果将无法解码:SGVsbG8=V29ybGQ=

我想要的结果是: Hello World

我不希望仅仅针对这个示例进行操作,而是需要一种适用于任何字符串的方法。此问题非常简单,是我正在努力解决的应用程序中的一步。


虽然这是一篇旧帖子,但可能会有所帮助。尝试使用JavaScript,链接为https://jsfiddle.net/1hcrvc16/3/。 - G J
2个回答

1
如果您将两个字符串都编码为数组,然后将这些数组组合起来,最后从字节中获取字符串,会怎样呢?
using System;
using System.Text;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var base1 = "SGVsbG8=";
        var base2 = "V29ybGQ=";
        var array1 = Convert.FromBase64String(base1);
        var array2 = Convert.FromBase64String(base2);   
        var comb = Combine(array1, array2);
        var data = Encoding.Default.GetString(comb);
        Console.WriteLine(data);
    }
    private static byte[] Combine(byte[] first, byte[] second)
    {
        return first.Concat(second).ToArray();
    }
 }

谢谢,这让我找到了一个足够的解决方案来短期处理一种情况。如果您对输入编码完全控制,它可以工作。我们的环境中存在编码输入(ascii和utf-8)的混合情况,我想象其他许多编码方式也不会更容易。选择您的编码方式。解码输入,确保编码方式相等,如果不相等,则使编码方式相等,然后合并...并且如果您无论如何都将东西转换为字符串,最好以字符串形式连接,然后编码为您选择的编码方式。这已经被证明是我们最安全的方法。Ascii可能会丢失数据。例如,一个Unicode表情符号。 - Hunter-Orionnoir

-1
我找到了一种最好的方法来实现这个,就是在一个字符串和另一个字符串之间添加加号,并在字符串末尾添加一个(仅一个)等于号字符('=')。返回值将是"Hello>World",然后移除">"即可。
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());
    }
 }

(旧方法)在C#中,我会这样做:

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

谢谢!它在我运行的一堆测试中都有效。如果您使用不以'='结尾的字符串(例如单词“big”(“Ymln”)),则存在间距问题。但是,我甚至不担心间距,因为应该在编码之前将其添加到字符串中。非常感谢。 - DonO
是的,我只是为了参加“Hello World”案例而放置了空格,但正确的方法是让决定是否放置空格的权利交给接收DecodeBase64String方法返回值的人。 - Ricardo Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接