使用c#序列化#

问题描述:

序列化可以用作存储程序状态的安全手段吗?使用c#序列化#

+0

请问你能解释多一点请 – anishMarokey 2010-07-22 04:11:08

+0

序列化的目的不是安全的,所以想想加密。 – Incognito 2010-07-22 04:21:19

+0

防御会有什么攻击? – rook 2010-07-22 04:25:26

不,序列化只是一种技术,允许您将对象或对象图的内存中表示转换为稍后可以与类型定义一起使用的字节流,并将其重新恢复为内存中的表示形式相同的对象。如果您需要某种安全性,您可以在将其保存(存储)到磁盘或数据库之前加密字节流,然后在解序列化之前再解密它,但串行化/反序列化过程本身不提供安全性。

尼斯摘自wikipedia:

序列化,但是,通过 可能暴露私人 实施细则打破了 不透明的抽象数据类型。为了阻止 竞争对手制作兼容 产品,专有 软件的发布者经常保留 其程序的序列化格式 的商业秘密。有些人故意 混淆或甚至加密序列化的数据。

换句话说,序列化本身并不安全可言,因为它可能暴露数据,而不是混淆或隐藏数据。人类可读序列化可能会使这种困境变得更糟。

作为一个完全侧面的说明,我可以建议看看协议缓冲区而不是序列化吗?

http://code.google.com/apis/protocolbuffers/docs/faq.html

Protobuf-net

Also: Jon Skeet's C# port of the protocol buffers (from Java, I believe...)

+1 @Charles'的解释。

如果您要以每个用户为基础保存应用程序设置,则应使用System.Security.Cryptography命名空间中的ProtectedData类来安全地存储序列化数据;使用每个用户数据的DataProtectionScope.CurrentUser范围。

ProtectedData类使用用户的登录密码加密数据;底层的DPAPI代码处理密码更改,因此仍然可以访问数据。