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 に答える