我有这个简单的Xml文件
<Root>
<Licence Name="My name" Age="23"/>
</Root>
在我的加密和解密过程中,我正在使用ToBase64String()
和FromBase64String()
方法,但是当我尝试解密文件时,它没有工作,&lt;&gt; ; 女巫限制我的许可证元素丢失。这是加密和解密后的结果:
<Root><Licence Name="My name" Age="23" /></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();
}
答案 0 :(得分:3)
您正在xDoc.SetValue(dataDecrypted);
中使用SetValue。这将设置<Root>
节点的文本,转义任何特殊字符,例如'&lt;'和'&gt;'字符。
相反,使用XElement.Parse()创建一个基于解码(而不是解密)字符串的新XElement。
答案 1 :(得分:1)
而不是xDoc.SetValue(dataDecrypted);
您需要使用此代码:
xDoc.FirstNode.ReplaceWith(XElement.Parse(dataDecrypted));