2012-01-17 13 views
3

シリアル化可能な(xml)クラスに含まれるデータを暗号化しようとしています。ここでは簡単な例です:Encrypt & Decryptシリアル化の前にデータを暗号化します

[XmlRootAttribute("FooClass")] 
public class FooClass 
{ 
    private string _personalData; 

    public PersonalData 
    { 
     set { _personalData = value;} 
     get { return _personalData; } 
    } 
} 

は方法カントー使用できるようになりがあるとします。シリアル化された出力でPersonalDataを暗号化するために、シリアル化中に何とかそれらを使用する方法はありますか?

+2

あります... –

+0

誰が暗号化する必要がありますか?データをどのように暗号化するかについて、ユーザーの視点から詳細を教えてください。 – Will

答えて

5

はい。 nonserializedとしてマークPersonalData、その後、(XmlAttributeがオプションであることに注意してください)シリアル化されたデータを返すと受け入れるように新しいプロパティを追加します。

[XmlRootAttribute("FooClass")] 
public class FooClass 
{ 
    private string _personalData; 

    [NonSerialized()] 
    public string PersonalData 
    { 
     set { _personalData = value;} 
     get { return _personalData; } 
    } 

    [XmlAttribute("PersonalData")] 
    public string PersonalDataEncrypted 
    { 
     set { _personalData = DecryptData(value);} 
     get { return EncryptData(_personalData); } 
    } 
} 
+0

簡単です。実際には、シリアライザが特定の暗号化/復号化メソッドを使用するように誘導する属性を探していました。 – Odys

+0

@odyodyodys:このようなものは見当たりませんでした。おそらく、実装するために指定する必要があるパラメータが非常に多いからです対称アルゴリズム –

4

はい。あなたはOnSerializingAttribute、OnDeserializingAttributeを使用することができ、かつXmlIgnore属性:

private string _encryptedPersonalData; 
private string _personalData;      

[XmlIgnore] 
public PersonalData 
{     
    set { _personalData = value;}     
    get { return _personalData; }    
} 

public string EncryptedPersonalData 
{ 
    get { return _encryptedPersonalData; } 
    set { _encryptedPersonalData = value; } 
} 

[OnDeserializingAttribute()] 
internal void DecryptPersonalData(StreamingContext context) 
{ 
    // Decrypt data here  
} 


[OnSerializingAttribute()] 
internal void EncryptPersonalData(StreamingContext context) 
{ 
    // Encrypt data here  
} 

またはこれに似た何か。これらのメソッドは、シリアル化が行われる前に呼び出されます。 詳細情報:http://msdn.microsoft.com/en-US/library/ty01x675(v=VS.80).aspx

+0

私が探していたもののように見えます。ありがとう – Odys

関連する問題