1

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

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

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

更新

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

4

2 回答 2

0

A:如果你想偷懒,就用GZip压缩它——它会压缩数据,所以你只能通过先 un-GZiping 来读取它。

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

随时要求澄清如何使用这些选项中的任何一个。

于 2013-06-26T23:34:51.373 回答
0

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

// 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 属性将在序列化期间自动加密并在反序列化期间解密。

于 2013-06-26T23:44:39.923 回答