Base 64编码问题

时间:2012-12-12 18:22:40

标签: c# .net base64

我有一些Base64编码数据作为字节数组,我试图将其转换回原始格式。

数据到达我的函数编码两次。我想要实现的是:

string encoded = "some base 64 string";
byte [] data = System.Convert.FromBase64String(System.Convert.FromBase64String(encoded));

上面的陈述当然是错误的,因为当我尝试时,我无法弄清楚使用哪种功能组合并遇到unicode问题。任何指针都会受到赞赏。

4 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你就是在尝试这样做:

  • 将base64字符串转换为字节数组
  • 将字节数组转换为ASCII字符串
  • 使用base64
  • 将该字符串转换为字节数组

在这种情况下,您的陈述将如下所示:

byte[] twiceDecoded = Convert.FromBase64String(Encoding.ASCII.GetString(Convert.FromBase64String(encoded)));

答案 1 :(得分:2)

使用下面的示例数据和代码,我可以获得docx(也是zip)文件( 50 4B 03 04 14 00 )的签名。如果您发布的样本来自encoded字符串的开头,则很可能在下面的代码中可以使用。

byte[] buf = Convert.FromBase64String(encoded);
var hex2 = Encoding.Unicode.GetString(buf);
byte[] data = Convert.FromBase64String(hex2);

答案 2 :(得分:0)

我取决于你喜欢的输出格式。 这是一个小示例代码,它解密您的base64值并返回UTF8格式的字符串:

public static string DecodeFrom64(string value)
{
    byte[] encodedDataAsBytes = System.Convert.FromBase64String(value);
    return System.Text.Encoding.UTF8.GetString(encodedDataAsBytes);
}

答案 3 :(得分:0)

如果我理解正确,您的byte[]包含base64编码数据,并且您希望获得包含原始字符串的string

您要做的第一件事就是将byte[]放入string。假设你知道数组中有多少字节,并且你知道使用了什么文本编码(即UTF-8,Unicode,ASCII等),你可以写:

string base64String = Utf8Encoding.GetString(bytes);

在那里替换Utf8Encoding的正确文本编码。如果字符串确实是base64,那么Utf8Encoding应该可以工作。或者也许是其中一种Unicode编码,如果它是每个字符2个字节。

然后您应该能够获得这样的原始字符串:

string originalString = Convert.FromBase64String(base64String);