2011-02-17 59 views
0

我有简单的C#函数,它接受一个字符串进行编码,并将其返回:与参数“你好”我得到的XML文件中像这样问题与XML文档中的十六进制值

public static string EncodeString(string input) 
    { 
     byte[] bChiperText = null; 

     RijndaelManaged rp = new RijndaelManaged(); 
     rp.Key = UTF8Encoding.UTF8.GetBytes("!Lb!&*W_4Xc54_0W"); 
     rp.IV = UTF8Encoding.UTF8.GetBytes("6&^Fi6s5SAKS_Ax6"); 

     ICryptoTransform re = rp.CreateEncryptor(); 

     byte[] bClearText = UTF8Encoding.UTF8.GetBytes(input); 
     MemoryStream Mstm = new MemoryStream(); 

     CryptoStream Cstm = new CryptoStream(Mstm, re, CryptoStreamMode.Write); 

     Cstm.Write(bClearText, 0, bClearText.Length); 
     Cstm.FlushFinalBlock(); 

     bChiperText = Mstm.ToArray(); 

     Cstm.Close(); 
     Mstm.Close(); 


     return System.Text.ASCIIEncoding.ASCII.GetString(bChiperText); 
    } 

调用此功能后:

<?xml version="1.0" encoding="utf-8"?> 
    <users> 
     <user name="user1" password="?V?Py????%??&#x13;?9?"/> 
    </users> 

Everithing罚款,但是当我打开Visual Studio中的XML文件,2010我收到警告这样的:

错误1个字符“”,十六进制值0×13在XML文档中是非法的。

有人可以告诉我做错了吗?我可以忽略这些警告吗?
感谢

+0

如何将字符串添加到XML文档? – 2011-02-17 19:42:04

回答

5

这就是问题所在:

return System.Text.ASCIIEncoding.ASCII.GetString(bChiperText); 

你将任意的二进制数据,就好像它是ASCII通过处理它只是文本。不是。不要这样做。

最安全的方法是使用Base64编码:

return Convert.ToBase64String(bChiperText); 

当然,您的客户将需要做同样的复归,例如通过使用Convert.FromBase64String