0

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

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

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

上面的陈述当然是错误的,因为我无法弄清楚要使用哪种功能组合,并且在尝试时遇到了 unicode 问题。任何指针将不胜感激。

4

4 回答 4

3

如果我正确理解您的问题,那么您正在尝试这样做:

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

在这种情况下,您的声明将如下所示:

byte[] twiceDecoded = Convert.FromBase64String(Encoding.ASCII.GetString(Convert.FromBase64String(encoded)));
于 2012-12-12T18:48:49.273 回答
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);
于 2012-12-12T18:47:02.667 回答
0

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

public static string DecodeFrom64(string value)
{
    byte[] encodedDataAsBytes = System.Convert.FromBase64String(value);
    return System.Text.Encoding.UTF8.GetString(encodedDataAsBytes);
}
于 2012-12-12T18:46:16.217 回答
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);
于 2012-12-12T18:46:46.110 回答