2013-06-26 46 views
1

我正在開發用於辦公室的加載項。在我的應用程序中,我需要存儲用戶提供的一些數據。序列化包含祕密數據的類對象 - 使用加密序列化

現在,這些數據「會辦公軟件(Word,Excel和電源點)之間共享,所以我需要將它們存儲在某些文件,我可以從我的應用程序在任何Office程序訪問。

我的問題是我怎麼能我的序列化數據對象(我已經找到那個例子),但我想要一個像密碼的一些數據進行加密。我試圖將數據對象存儲爲二進制格式,但我仍然可以讀取數據(只需在記事本++中打開它)。任何想法?

UPDATE

我並不需要知道如何對數據進行加密,我想我的序列化的數據對象,並同時加密的重要或機密數據(序列加密)

+0

你可能想看看http://stackoverflow.com/questions/4501289/c-sharp-byte-encryption –

+0

可以用於序列化我的數據對象加密一些字段? –

+0

加密整個批次,然後在反序列化之前將其解密。或者不要使用純文本密碼(不管怎樣) –

回答

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); 
} 

的說明的屬性和方法...

[非序列化()] - 告訴串行到不包括在所述序列化對象這個字段/屬性。

[OnSerializing()] - 告訴串行序列化對象之前,調用此方法。我們的加密代碼在這裏,因爲我們希望密碼的加密值被序列化。

[OnSerialized()] - 告訴串行對象已被串行化後,調用此方法。我們需要在這裏將密碼重置爲未加密狀態。 (而不是保存未加密的密碼,你可以在這裏簡單地解密)

[OnDeserialized()] - 告訴序列化程序在對象被反序列化後調用此方法。這是我們解密的地方,因爲在解密密碼之前,對象還沒有準備好使用。

通過這些屬性和方法,Password屬性將在序列化期間自動加密並在反序列化期間解密。

+0

我需要序列化我的數據並加密一些字段(使用加密序列化) –

+0

您能否爲我提供很好的示例或教程? –

+0

你走了。根據您的更新進行更新。 :) – Kevin

0

一:如果你想懶惰,只需GZip它 - 它壓縮數據,使其只能通過首先un-GZiping讀取它。

B:Encrypt的數據。這要求您有密碼才能閱讀。這也很難實施。

請隨時索要關於如何使用這些選項的說明。

+0

我需要序列化我的數據並加密一些字段(使用加密序列化) –

相關問題