Какой наилучший метод шифрования при использовании ProtoBuf?
-
22-08-2019 - |
Вопрос
Я перенес свою базу данных на свое мобильное устройство из VistaDB, потому что это слишком медленно.Теперь я использую ProtoBuf вместо этого для создания серии плоских файлов на карте памяти, единственная проблема в том, что там явно отсутствует шифрование.
Какой метод шифрования лучше всего работает с ProtoBuf?По сути, я сериализую коллекцию объектов данных в файл, а затем десериализую из файла обратно в свои коллекции.Я полагаю, что лучшее место для размещения шифрования было бы в FileStream при чтении / записи.
Данные будут содержать номера NI, имена и адреса, поэтому это должно быть безопасно.У кого-нибудь есть идеи?
Решение
Я думаю, вы на правильном пути.Вы просто должны быть в состоянии сделать что-то вроде:
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 encryption framework (в том числе о том, как получить объекты ICryptoTransform, см. Другие вопросы, такие как Каков наилучший способ шифрования коротких строк в .NET?.
Другие советы
Другим вариантом является фактическое шифрование всей папки, в которой хранятся данные, путем установки общесистемного фильтр файловой системы.Преимущества здесь заключаются в том, что:
- Код вашего приложения не зависит от шифрования, и шифрование будет выполняться в машинном коде.
- Поскольку шифрование выполняется в машинном коде, оно будет быстрее
- Поскольку шифрование не находится внутри управляемого кода, намного сложнее перепроектировать и вычислить ваши ключи, соли и т.д.
Конечно, недостатком (для тех, кто все равно не пишет на C) является то, что вы не можете написать это на C #.