Какой лучший метод шифрования при использовании ProtoBuf?

Я перенесла свою базу данных на своем мобильном устройстве в сторону от VistaDB, потому что она слишком медленная. Теперь я использую ProtoBuf, чтобы создать серию плоских файлов на Карте памяти, единственной проблемой является отсутствие шифрования.

Какой метод шифрования лучше всего работает с ProtoBuf? Я в основном сериализации коллекции объектов данных в файл, а затем десериализации из файла обратно в мои коллекции. Я считаю, что лучше всего поставить шифрование в FileStream на чтение/запись.

Данные будут содержать номера NI, имена и адреса, поэтому это должно быть безопасно. Любая идея кого-нибудь?

Ответ 1

Я думаю, ты на правильном пути. Вы должны просто сделать что-то вроде:

ICryptoTransform encryptor = ...
Stream encStream = new CryptoStream(outputFileStream, encryptor, CryptoStreamMode.Write);
Serializer.Serialize(encStream, obj);
encStream.FlushFinalBlock()
encStream.Close();

ICryptoTransform decryptor = ...
Stream decStream = new CryptoStream(inputputFileStream, decryptor, CryptoStreamMode.Read);
Serializer.Deserialize<Type>(decStream);
decStream.FlushFinalBlock()
decStream.Close();

Основы инфраструктуры шифрования .NET(в том числе, как получить объекты ICryptoTransform, см. другие вопросы, такие как Каким образом можно шифровать короткие строки в .NET?.

Ответ 2

Другой вариант - фактически шифровать всю папку, в которой хранятся данные, путем установки общесистемного фильтра файловой системы. Преимущества здесь заключаются в следующем:

  • Код вашего приложения не зависит от шифрования, и шифрование будет выполнено в собственном коде.
  • Поскольку шифрование выполняется в собственном коде, оно будет быстрее
  • Поскольку шифрование не находится внутри управляемого кода, гораздо сложнее переделать и выяснить свои ключи, соли и т.д.

Конечно, недостаток (для тех, кто вообще не пишет C) заключается в том, что вы не можете записать его на С#.