Serialization 什么';使用ProtoBuf时,最好的加密方法是什么?

Serialization 什么';使用ProtoBuf时,最好的加密方法是什么?,serialization,encryption,compact-framework,.net-2.0,protocol-buffers,Serialization,Encryption,Compact Framework,.net 2.0,Protocol Buffers,我已经将移动设备上的数据库从VistaDB迁移出去,因为它太慢了。我现在使用ProtoBuf在存储卡上创建一系列平面文件,唯一的问题是显然没有加密 哪种加密方法最适合ProtoBuf?我基本上是将一组数据实体序列化为一个文件,然后从该文件反序列化回我的集合。我认为最好将加密放在读/写操作的文件流中 数据将包含NI编号、名称和地址,因此这必须是安全的。有人知道吗?我想你说得对。您应该能够执行以下操作: ICryptoTransform encryptor = ... Stream encStrea

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

哪种加密方法最适合ProtoBuf?我基本上是将一组数据实体序列化为一个文件,然后从该文件反序列化回我的集合。我认为最好将加密放在读/写操作的文件流中


数据将包含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();
ICryptoTransform加密程序=。。。
Stream encStream=新加密流(outputFileStream,encryptor,CryptoStreamMode.Write);
Serializer.Serialize(encStream,obj);
encStream.FlushFinalBlock()文件
encStream.Close();
ICryptoTransform解密程序=。。。
Stream decStream=新加密流(inputputFileStream、解密程序、CryptoStreamMode.Read);
反序列化(decStream);
decStream.FlushFinalBlock()
decStream.Close();

有关.NET加密框架的基础知识(包括如何获取ICryptoTransform对象,请参阅其他问题,如。

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

  • 您的应用程序代码与加密无关,加密将在本机代码中完成
  • 因为加密是在本机代码中完成的,所以速度会更快
  • 由于加密不在托管代码中,所以进行反向工程并找出密钥、盐等要困难得多

  • 当然也有缺点(对于那些不写C的人来说)如果你担心密钥的机密性,你就不能用C#来写它。

    如果你担心密钥的机密性,就把它设置为基于密码的,并对手动输入的密码进行多次散列以生成一个密钥。

    显然,我为DUP道歉。这是由于一个错误。我实际上不知道答案,但是+1使用了“while”这个词!我对DUP的出色使用表示赞赏f英语。我知道“while”应该是常识,但我仍然很感激看到它的使用。我知道,吹毛求疵……:)我不知道本机代码会快多少。这可能取决于有多少数据存在疑问。我也不认为托管代码会让关键变得那么明显。无论哪种方式,密钥都应该在内存中保留一段短时间(调试器可能会看到),并且永远不会在磁盘上。使用密钥的最佳方式是什么?我需要知道密钥,以便可以在服务器端和客户端对数据进行加密/解密。这意味着双方都需要知道钥匙,我还需要能够将存储数据的卡实时放入新的PDA中,并且仍然能够查看数据。将密钥存储在源代码中是一种不好的做法吗?是的,将密钥(未加密的)存储在硬盘驱动器的任何位置(包括源代码中)意味着它基本上立即被破坏。这就是为什么DRM方案总是以失败告终。使用Reflector分解托管代码使初级“黑客”很容易找到密钥。如果它隐藏在本机字节码中,那么反汇编和查找它需要更多的技巧。如果您的建议专门针对ProtoBuf?