Вот конвейер:
- внутриигровые данные преобразуются в файл 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();
}
}
}
}
}
Код: Выделить всё
public bool Save(string relativePath, byte[] bytes)
{
var absolutePath = Path.Combine(_applicationDataPath, relativePath);
var fi = new FileInfo(absolutePath);
var di = fi.Directory;
try
{
if (!di.Exists)
di.Create();
var exists = fi.Exists;
using (var fs = exists ? fi.OpenWrite() : fi.Create())
{
fs.SetLength(0);
fs.Seek(0, SeekOrigin.Begin);
using (var ms = new MemoryStream(bytes))
{
ms.CopyTo(fs);
ms.Flush();
return true;
}
}
}
catch (Exception ex)
{
Debug.LogException(ex);
return false;
}
}
Проблема в том, что я не могу воспроизвести эту ошибку на своем компьютере.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-aes-en
Мобильная версия