在序列化之前加密数据

时间:2012-01-17 20:46:57

标签: c# .net-3.5

我正在尝试加密可序列化(xml)类包含的数据。这是一个简单的例子:

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

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

假设已准备好使用这些方法:Encrypt& Decrypt。有没有办法在序列化过程中以某种方式使用它们来加密序列化输出中的PersonalData

2 个答案:

答案 0 :(得分:5)

是。将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); }
    }
}

答案 1 :(得分: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