c# - <> 转换为 64BaseString 和从 64BaseString 时 Xml 丢失

标签 c# .net xml encryption

我有这个简单的 Xml 文件

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

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

<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();
}

最佳答案

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

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

关于c# - <> 转换为 64BaseString 和从 64BaseString 时 Xml 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565694/

相关文章:

c# - 将MySQL数据库连接到C#而不打开xampp

c# - ASP.NET MVC 5 - 重定向到具有文化的同一页面

c# - EntityKey 属性只能在属性的当前值为 null 时设置

.net - SendKeys.SendWait在Windows 7中不发送 "{ENTER}"

java - 沿 Activity 右侧平铺图像

java - 使用fragment在Activity中创建新的Activity

c# - 如何在 asp.net c# html 中显示文本之间的空格

c# - 误报 : precondition is redundant

.net - 如何在 Powershell 二进制模块(.Net Standard 和 Nuget)中处理公共(public)和私有(private)依赖项和打包

java - Java 中的 XML 格式化 - 维护状态缩进