使用ProtoBuf时,加密的最佳方法是什么?

时间:2009-05-19 09:13:26

标签: serialization encryption compact-framework .net-2.0 protocol-buffers

我已将我的移动设备上的数据库迁移远离VistaDB,因为它太慢了。我现在正在使用ProtoBuf在存储卡上创建一系列平面文件,唯一的问题是显然没有加密。

哪种加密方法最适合ProtoBuf?我基本上将一组数据实体序列化到一个文件中,然后从File反序列化回到我的集合中。我认为加密的最佳位置是在读/写的FileStream中。

数据将包含NI编号,名称和地址,因此必须是安全的。任何人都不知道吗?

3 个答案:

答案 0 :(得分:4)

我认为你走在正确的轨道上。你应该能够做到这样的事情:

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对象,请参阅What’s the best way to encrypt short strings in .NET?等其他问题。

答案 1 :(得分:1)

另一种选择是通过安装系统范围的file system filter来实际加密存储数据的整个文件夹。这里的优点是:

  1. 您的应用代码与加密无关,加密将以原生代码完成。
  2. 由于加密是在本机代码中完成的,因此会更快
  3. 由于加密不在托管代码中,因此反向工程并弄清楚你的密钥,盐等等要困难得多。
  4. 当然缺点(对于那些不写C的人来说)就是你不能用C#编写它。

答案 2 :(得分:0)

如果您担心密钥机密性。使其基于密码,并多次哈希手动输入的密码以生成密钥。