C# 在序列化之前加密数据

C# 在序列化之前加密数据,c#,.net-3.5,C#,.net 3.5,我试图加密可序列化(xml)类包含的数据。下面是一个简单的例子: [XmlRootAttribute("FooClass")] public class FooClass { private string _personalData; public PersonalData { set { _personalData = value;} get { return _personalData; } } } 假设有以下方法可供使用

我试图加密可序列化(xml)类包含的数据。下面是一个简单的例子:

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

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

假设有以下方法可供使用:
加密
解密
。是否有办法在序列化过程中以某种方式使用它们来加密序列化输出中的
个人数据
。将PersonalData标记为非序列化,然后添加新属性以返回和接受序列化数据(请注意,XmlAttribute是可选的):


对。您可以使用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    
}
或者类似的东西。这些方法将在序列化发生之前调用。
更多信息:

应该为谁加密?从用户的角度给我们一些关于数据应该如何加密的细节。实际上,我正在寻找一个属性,该属性将引导序列化程序使用特定的加密/解密method@odyodyodys:我没有见过这样的情况,可能是因为要实现对称算法需要指定大量的参数。看起来正是我想要的。谢谢
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    
}