我有一些Base64编码数据作为字节数组,我试图将其转换回原始格式。
数据到达我的函数编码两次。我想要实现的是:
string encoded = "some base 64 string";
byte [] data = System.Convert.FromBase64String(System.Convert.FromBase64String(encoded));
上面的陈述当然是错误的,因为当我尝试时,我无法弄清楚使用哪种功能组合并遇到unicode问题。任何指针都会受到赞赏。
答案 0 :(得分:3)
如果我理解你的问题,你就是在尝试这样做:
在这种情况下,您的陈述将如下所示:
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);