6

我曾尝试在我的 xml 中实现自动加密和解密,但它不只是工作,即数据未加密。可能是什么原因?我的代码如下所示。我正在使用XmlSerializer类。谢谢

[Serializable]
public class User
{
    public string _username;
    public string _password;
    public string[] _roles;

    [XmlIgnore]
    public string Username
    {
        get { return _username; }
        set { _username = value; }
    }

    [XmlIgnore]
    public string Password
    {
        get { return _password; }
        set { _password = value; }
    }

    [XmlIgnore]
    public string[] Roles
    {
        get { return _roles; }
        set { _roles = value; }
    }

    [OnDeserializingAttribute]
    internal void DecryptPersonalData(StreamingContext context)
    {
        _username = Crypto.Decrypt(_username);
        _password = Crypto.Decrypt(_password);
        for (int i = 0; i < _roles.Length; i++)
        {
            _roles[i] = Crypto.Decrypt(_roles[i]);
        }
    }

    [OnSerializingAttribute]
    internal void EncryptPersonalData(StreamingContext context)
    {
        _username = Crypto.Encrypt(_username);
        _password = Crypto.Encrypt(_password);
        for (int i = 0; i < _roles.Length; i++)
        {
            _roles[i] = Crypto.Encrypt(_roles[i]);
        }
    }
}
4

1 回答 1

3

OnDeserializing不被XmlSerializer.... 用于使用 执行自定义序列化XmlSerializer、从它派生并处理IXmlDeserializationCallback接口。

这是一个建议的解决方法(基本上,您将创建一个“双胞胎”类,该类在其获取中返回加密数据,并在其集合中进行解密……您不仅会在序列化任务期间使用“双胞胎”……复制从用户到你的用户2)。

或者您可以改用 DataContractSerializer(但它的限制是它不支持 XML 属性,仅支持序列化流中的元素)。

于 2013-07-23T09:26:14.000 回答