15

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

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

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

4

3 回答 3

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 对象,请参阅其他问题,例如在 .NET 中加密短字符串的最佳方法是什么?

于 2009-05-19T09:46:33.637 回答
2

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

  1. 您的应用程序代码与加密无关,加密将在本机代码中完成。
  2. 由于加密是在本机代码中完成的,它会更快
  3. 由于加密不在托管代码中,因此逆向工程和找出您的密钥、盐等要困难得多。

当然,缺点(对于那些不写 C 的人来说)是你不能用 C# 编写它。

于 2009-05-19T18:15:16.477 回答
0

如果您担心密钥的机密性。是否基于密码,并多次散列手动输入的密码以生成密钥。

于 2020-09-16T17:38:24.763 回答