Какой лучший метод шифрования при использовании ProtoBuf? - PullRequest
12 голосов
/ 19 мая 2009

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

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

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

Ответы [ 2 ]

4 голосов
/ 19 мая 2009

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

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? .

1 голос
/ 19 мая 2009

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

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

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

...