C# SHA1哈希已转换为无效的xml

C# SHA1哈希已转换为无效的xml,c#,xml,sha1,C#,Xml,Sha1,我有一个字典,我把它转换成XML,然后用SHA1散列 string xmlMessageCode = inputDictionary.ToXML(); //Extension method. UnicodeEncoding UE = new UnicodeEncoding(); SHA1Managed hasher = SHA1Managed(); byte[] hashString = Encoding.UTF8.GetBytes(xmlMessageCode.ToCharArray());

我有一个字典,我把它转换成XML,然后用SHA1散列

string xmlMessageCode = inputDictionary.ToXML(); //Extension method.

UnicodeEncoding UE = new UnicodeEncoding();
SHA1Managed hasher = SHA1Managed();
byte[] hashString = Encoding.UTF8.GetBytes(xmlMessageCode.ToCharArray());
byte[] hashCode = hasher.ComputeHash(hashString);

string computedHashString = UTF8Encoding.UTF8.GetString(hashCode);

return computedHashString;
之后,我将该值放入对象属性中,然后将这些对象的集合序列化为XML:

XmlSerializer ser = new XmlSerializer(typeof(T));
XmlWriterSettings settings = new XmlWriterSettings()
{
Indent = false,
OmitXmlDecleration = false,
Encoding = Encoding.UTF8
};

using(StringWriter sr = new StringWriter)
{
using(XmlWriter xmlr = XmlWriter.Create(sr, settings))
{
ser.Serialize(sr, newList);
}
return sr.ToString();
}
这会生成XML,但当我尝试验证生成的XML时,在从哈希字符串创建的属性中会出现错误

解决这个问题的最佳方法是什么?
我应该去掉无效字符还是有更优雅的解决方案?

XML是一种基于文本的表示形式,不能直接将二进制信息嵌入其中

因此,您必须将二进制数据转换为文本-通常使用Base64编码

因此而不是

string computedHashString = UTF8Encoding.UTF8.GetString(hashCode);
你应该使用

string computedHashString = System.Convert.ToBase64String(hashCode);