Можно ли получить массив ненулевой длины с нулевыми байтами во время шифрования Aes?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли получить массив ненулевой длины с нулевыми байтами во время шифрования Aes?

Сообщение Anonymous »

Несколько пользователей столкнулись со странными проблемами в моем приложении/игре. Они сообщили, что их файлы сохранений стали недействительными. Я пытался выяснить, в чем проблема, но ничего не нашел.
Вот конвейер:
  • внутриигровые данные преобразуются в файл json (строка)
  • файл json преобразует байты UTF8
  • Байты UTF8 проходят через этот метод шифрования (с использованием AES)
Это первая игра, в которой я решил использовать шаг №3 (сохранить данные с шифрованием), и я не нашел ничего странного и подобного в тестовых сценариях и на тестовых стендах.
После того, как я получил несколько файлов сохранения от вовлеченных пользователей, я увидел, что все эти файлы имеют допустимую ненулевую длину, но содержат только нулевые байты.
Вот код:

Код: Выделить всё

public static byte[] Encrypt(byte[] clearBytes, string encyptionKey)
{
using (var algorythm = Aes.Create())
{
algorythm.Mode = CipherMode.CBC;
algorythm.Padding = PaddingMode.PKCS7;
var encryptionBytes = _encoding.GetBytes(encyptionKey);
using (var pdb = new Rfc2898DeriveBytes(encryptionBytes, _salt, _iterations, _hashAlgorithm))
{
algorythm.Key = pdb.GetBytes(32);
algorythm.IV = pdb.GetBytes(16);
using (var encryptor = algorythm.CreateEncryptor())
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
}
return ms.ToArray();
}
}
}
}
}
Если убрать шифрование, все работает хорошо, отчетов о поврежденных файлах сохранения нет.
Проблема в том, что я не могу воспроизвести эту ошибку на своем компьютере.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-aes-en
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»