Преобразование закодированного байта [] в строку для печати

Я кодирую строки, используя C# Rijndael AES шифрование. Я генерирую ключ и IV и использую их для кодирования строк и значений, которые затем могу сохранить на диск (я использую настройки проигрывателя Unity3D).

Проблема, с которой я сталкиваюсь, заключается в том, что ключи и значения PlayerPrefs должны быть действительными последовательностями символов, а закодированные байты не обязательно являются действительными.

Итак, после кодирования моей строки с моим ключом и IV, я получаю байтовый массив, который я могу кодировать в Unicode, но (иногда), когда я пытаюсь сохранить его, я получаю сообщение об ошибке:

byte[] encryptedBytes = Encode("someText", encryptionKey, initVector);
string encodedString = Encoding.Unicode.GetString(encryptedBytes);
PlayerPrefs.SetString("SecretData",encodedString);
PlayerPrefs.Save();

Ошибка:

недопустимая последовательность utf-16 в -1073752512 (отсутствует суррогатный хвост)

Любой способ убедиться, что строка в правильном формате?

1 ответ

Решение

Байты, возвращаемые функцией шифрования, неотличимы от случайных и могут не содержать правильную кодировку символов. Чтобы преобразовать результат в строку (если требуется), вы можете использовать base 64.

Другие вопросы по тегам