【问题标题】:serialize class object that contain secret data - serialization with encryption序列化包含秘密数据的类对象 - 加密序列化
【发布时间】:2013-06-26 23:31:46
【问题描述】:

我正在开发 Office 插件。在我的应用程序中,我需要存储用户提供的一些数据。

现在这些数据将在办公程序(word、excel、power-point)之间共享,所以我需要将它们存储在某个文件中,我可以在任何办公程序下从我的应用程序访问这些文件。

我的问题是如何序列化我的数据对象(我有相关示例),但我希望对密码等数据进行加密。我试图将数据对象存储为二进制格式,但我仍然可以读取数据(只需在记事本++中打开)..有什么想法吗?

更新

我不需要知道如何加密数据,我想序列化我的数据对象并同时加密重要或秘密数据(加密序列化)

【问题讨论】:

  • 用于序列化我的数据的对象可以加密一些字段吗?
  • 加密整个批次,然后在反序列化之前对其进行解密。或者不要使用纯文本密码(无论如何都是坏主意)
  • 你为什么不想加密整个批次?

标签: c# winforms office-addins


【解决方案1】:

在意识到您需要什么之后,使用正确属性修饰的以下方法应该可以工作...您只需要在序列化期间和之后以及反序列化之后运行一些自定义代码...

// Save your password so you can reset it after the object has been serialized.
[NonSerialized()] 
private string SavedPassword;

// This saves the value of Password and Encrpts it so it will be stored Encrypted.
// I am leaving out the Encrypt code to make it cleaner here.
[OnSerializing()]
internal void OnSerializingMethod(StreamingContext context)
{
    SavedPassword = Password;
    Password = Encrypt(Password);
}

// reset the Password after serialization so you can continue to use your object.
[OnSerialized()]
internal void OnSerializedMethod(StreamingContext context)
{
    Password = SavedPassword;
}

// On deserialize you need to Decrypt your Password.
[OnDeserialized()]
internal void OnDeserializedMethod(StreamingContext context)
{
    Password = Decrypt(Password);
}

属性和方法的解释...

[NonSerialized()] - 告诉序列化程序不要在序列化对象中包含此字段/属性。

[OnSerializing()] - 告诉序列化程序在序列化对象之前调用此方法。我们的加密代码放在这里是因为我们希望对密码的加密值进行序列化。

[OnSerialized()] - 告诉序列化程序在对象被序列化后调用此方法。我们需要在这里将密码重置为未加密状态。 (您可以在这里轻松地进行解密,而不是保存未加密的密码)

[OnDeserialized()] - 告诉序列化程序在对象被反序列化后调用此方法。这是我们解密的地方,因为在我们解密密码之前,该对象还没有准备好使用。

有了这些属性和方法,Password 属性将在序列化期间自动加密并在反序列化期间解密。

【讨论】:

  • 我需要序列化我的数据并加密一些字段(序列化加密)
  • 你能解释更多你的代码,或者如果可能的话,用用户名(纯文本)和密码(加密)做一个完整的代码
  • 听起来您的对象中存储了明文密码。但是,密码的类型并不重要,只要您编写 Encrypt 和 Decrypt 来处理您传入的内容并将 SavedPassword 修改为与您的密码相同的类型即可。
【解决方案2】:

答:如果你想偷懒,就GZip它吧——它会压缩数据以使你只能通过先解压缩它来读取它。

B:Encrypt 数据。这需要您有密码才能阅读。这也更难实现。

请随时询问有关如何使用这些选项的说明。

【讨论】:

  • 我需要序列化我的数据并加密一些字段(序列化加密)
猜你喜欢
  • 1970-01-01
  • 2013-06-27
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
相关资源
最近更新 更多