Base 64 декодирование неизвестного формата - PullRequest
0 голосов
/ 08 марта 2019

Мне нужен совет по декодированию base64.Я буду делать это на языке c #.

Дело в том, что я не знаю, какой формат будет выводить декодирование, это может быть текст, XML, изображения или PDF.У меня только строка в кодировке base64.

Как вы, ребята, советуете мне продолжить?Есть предложения?

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

Многие типы изображений и PDF-файлы содержат магическое число, где первые X байтов идентифицируют тип файла.Вы должны декодировать строку и проверить двоичный файл на них (https://asecuritysite.com/forensics/magic дает их список).Если вы все еще не можете определить его, проверьте, анализирует ли он как XML, используя синтаксический анализатор XML, иначе предположите, что это текст.

1 голос
/ 08 марта 2019

Извлечение MIME-типа из строки base64:

/**
 * 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», и проанализируйте эту строку.

...