Base 64未知格式的解码

时间:2019-03-08 08:17:20

标签: c# base64 decoding

我需要有关解码base64的建议。我将在c#中进行此操作。

问题是,我不知道解码输出的格式是文本,XML,图像还是PDF。我只有base64编码的字符串。

你们如何建议我继续?有什么建议吗?

2 个答案:

答案 0 :(得分:3)

许多图像类型和pdf都包含一个魔术数字,其中前X个字节标识文件类型。您应该解码字符串并检查二进制文件(https://asecuritysite.com/forensics/magic给出了它们的列表)。如果您仍然无法识别它,请检查是否使用XML解析器将其解析为XML,否则假设它是文本。

答案 1 :(得分:1)

从base64字符串中提取MIME类型:

/**
 * Extract the MIME type from a base64 string
 * @param encoded Base64 string
 * @return MIME type string
 */
private static String extractMimeType(final String encoded) {
    final Pattern mime = Pattern.compile("^data:([a-zA-Z0-9]+/[a-zA-Z0-9]+).*,.*");
    final Matcher matcher = mime.matcher(encoded);
    if (!matcher.find())
        return "";
    return matcher.group(1).toLowerCase();
}

用法:

final String encoded = "data:image/png;base64,iVBORw0KGgoAA...5CYII=";
extractMimeType(encoded); // "image/png"
extractMimeType("garbage"); // ""

然后您可以编写字节数组:

var filePath = System.IO.Path.Combine(folderPath, string.Format("pdf_{0}.pdf", Guid.NewGuid()));
var byteArray = Convert.FromBase64String(base64pdf);

File.WriteAllBytes(filePath, byteArray);

打开文件:

Device.OpenUri(new Uri("file://" + filePath));

或对数据进行标记化,因为64种编码数据看起来像这样的“ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAKAC”并解析该字符串。