Какой лучший метод шифрования при использовании 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) заключается в том, что вы не можете записать его на С#.