xml文档中十六进制值的问题

0 c# xml

我有简单的C#函数,它接受一个字符串编码并返回它:

    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);
   } 
Run Code Online (Sandbox Code Playgroud)

用参数"hello"调用这个函数后,我得到这样的xml文件:

  <?xml version="1.0" encoding="utf-8"?>
  <users>
      <user name="user1" password="?V?Py????%??&#x13;?9?"/>
  </users>
Run Code Online (Sandbox Code Playgroud)

Everithing很好但是当我在visual studio 2010中打开xml文件时,我收到如下警告:

错误1字符'',十六进制值0x13在XML文档中是非法的.

任何人都可以告诉我做错了什么?我可以忽略那些警告吗?
谢谢

Jon*_*eet 5

这就是问题:

return System.Text.ASCIIEncoding.ASCII.GetString(bChiperText);
Run Code Online (Sandbox Code Playgroud)

您将任意二进制数据转换为文本,只需将其视为ASCII即可.不是.不要那样做.

最安全的方法是使用Base64:

return Convert.ToBase64String(bChiperText);
Run Code Online (Sandbox Code Playgroud)

当然,您的客户需要在还原时执行相同操作,例如使用Convert.FromBase64String.