1

我有这个简单的 XML 文件

<Root>
    <Licence Name="My name" Age="23"/>
</Root>

在我的加密和解密过程中,我正在使用ToBase64String()FromBase64String()方法,但它无法正常工作,当我尝试解密文件时,<>女巫限制我的许可证元素丢失了。这是加密和解密后的结果:

<Root>&lt;Licence Name="My name" Age="23" /&gt;</Root>

这是我的代码

//Encrypt
private void bnEncrypt_Click(object sender, EventArgs e)
{
        var xDoc = XElement.Load(@"C:\Opticien\Lic.xml");
        var data = xDoc.Element("Licence").ToString();

        var dataByte = Encoding.UTF8.GetBytes(data);
        var dataEncrypted = Convert.ToBase64String(dataByte);

        xDoc.SetValue(dataEncrypted);
        xDoc.Save(@"C:\Opticien\Lic.xml");
        memoEdit1.Text = xDoc.ToString();
}

//Decrypt
private void bnDecrypt_Click(object sender, EventArgs e)
{
        var xDoc = XElement.Load(@"C:\Opticien\Lic.xml");
        var data = xDoc.Value;

        var dataByte = Convert.FromBase64String(data);
        var dataDecrypted = Encoding.UTF8.GetString(dataByte);

        xDoc.SetValue(dataDecrypted);
        xDoc.Save(@"C:\Opticien\Lic.xml");
        memoEdit1.Text = xDoc.ToString();
}
4

2 回答 2

3

您正在使用 SetValue xDoc.SetValue(dataDecrypted);。这将设置<Root>节点的文本,转义任何特殊字符,如“<”和“>”字符。

相反,使用XElement.Parse()根据解码(而不是解密)字符串创建新的 XElement。

于 2012-09-24T13:10:31.217 回答
1

而不是xDoc.SetValue(dataDecrypted);您需要使用此代码:

xDoc.FirstNode.ReplaceWith(XElement.Parse(dataDecrypted));
于 2012-09-24T13:13:55.133 回答