Расшифровка запутанного значения - невозможно преобразовать данные в строку - PullRequest
0 голосов
/ 08 ноября 2018

Я работаю над импортом файла из устаревшей кодовой базы C ++. Сам файл технически является JSON, но одно из значений обфусцируется функцией XOR в кодовой базе C ++ до его получения и выглядит примерно так:

{"version": 15, "data": "C\u0016Q45\u0010 46QY\\\u0011\n\u0019a\u0003\u0019}\u001apg"}

Значение для «данных» технически является строкой UTF8.

Я знаю алгоритм, используемый для декодирования этих данных в пригодную для использования строку JSON. Тем не менее, я не могу быстро разобрать это в [String: String], очевидно, из-за проблем с форматированием.

Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 31."

До сих пор мне удавалось получить конкретные данные, выделив подданные

 let encryptedData = data.subdata(in: dataPrefixLength ..< dataLength - 2)

Тем не менее, я не могу быстро разобрать это в String, когда пытаюсь сделать это с кодировкой UTF8.

String(data: encryptedData, encoding: .utf8)

Стоит также отметить, что описание String в отладчике выглядит хорошо при проверке самих данных.

Буду очень признателен за любой совет. Спасибо!

1 Ответ

0 голосов
/ 08 ноября 2018

В вашем примере это выглядит так, как если бы обфускация 1002 * генерировала двоичные данные, а двоичные данные помещались в строку. Это не разрешено в JSON. Следовательно, это недопустимый JSON, и любой анализатор с достаточным количеством проверок отклонит его.

В качестве примера возьмем начало строки:

"C\u0016

Начинается с символа "С". Это действительно.

Затем следует экранированный символ с шестнадцатеричными значениями: 0016. Однако U + 0016 не является допустимой кодовой точкой Unicode. Поэтому он отклонен. Вероятно, это должен быть двоичный байт 0x16. Но вы не можете поместить это в строку JSON.

У вас есть два варианта:

  1. Исправить источник данных, например, используя кодировку Base64 перед помещением двоичных данных в JSON.

  2. Напишите свой собственный анализатор JSON для обработки недопустимого JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...