2012-09-24 28 views
1

時丟了,我有這個簡單的XML文件<> XML轉換和從64BaseString

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

'我試圖使用ToBase64String()方法來對其進行加密,然後使用FromBase64String()方法將其解密,' - 你把這個加密?哇!希望你的XML不會落入惡意用戶的手中,因爲他們只會嘲笑:-) –

+0

@Darin Dimitriv:我有我的加密和解密方法,我只是沒有發佈它們。我只是在我的加密和解密過程中使用ToBase64String()...。 – SidAhmed

+0

「加密」和「解密」在這裏似乎有點強大! – spender

回答

3

您正在使用的SetValue在xDoc.SetValue(dataDecrypted);。這將設置<Root>節點的文本,轉義任何特殊字符,如'<'和'>'字符。

改爲使用XElement.Parse()創建一個基於解碼(而不是解密)字符串的新XElement。

+0

非常感謝你^^ – SidAhmed

+0

@SidAhmed樂於幫忙。 – akton

1

相反的xDoc.SetValue(dataDecrypted);你需要使用此代碼:

xDoc.FirstNode.ReplaceWith(XElement.Parse(dataDecrypted)); 
+0

非常感謝你^^ – SidAhmed

相關問題