我有简单的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);
}
使用参数“hello”调用此函数后,我得到xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<users>
<user name="user1" password="?V?Py????%???9?"/>
</users>
Everithing很好但是当我在visual studio 2010中打开xml文件时,我会收到这样的警告:
错误1字符'',十六进制值0x13在XML文档中是非法的。
有人可以说出我做错了吗?我可以忽略这些警告吗? 感谢
答案 0 :(得分:5)
这是问题所在:
return System.Text.ASCIIEncoding.ASCII.GetString(bChiperText);
您将任意二进制数据转换为文本,只需将其视为ASCII即可。不是。不要那样做。
最安全的方法是使用Base64:
return Convert.ToBase64String(bChiperText);
当然,您的客户需要在还原时执行相同操作,例如:使用Convert.FromBase64String
。