Преобразование закодированного байта [] в строку для печати
Я кодирую строки, используя 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.