【发布时间】:2010-10-12 20:52:47
【问题描述】:
我正在从第 3 方(其签名的 xml)接收 Base64 编码的 saml 断言。我无法验证签名。经过仔细检查,似乎当我在 SAML xml 中读取 XmlDocument 更改了数据时。请参阅此代码:
string rawXml = Util.DecodeBase64(SAMLResponse);
byte[] b = Encoding.UTF8.GetBytes(rawXml);
MemoryStream s = new MemoryStream();
s.Write(b, 0, b.Length);
s.Flush();
s.Position = 0;
XmlDocument xml = new XmlDocument();
xml.PreserveWhitespace = true;
xml.Load(s);
MemoryStream s2 = new MemoryStream();
xml.Save(s2);
s2.Position = 0;
byte[] b2 = new byte[s2.Length];
s2.Read(b2, 0, b2.Length);
b 的长度为 6410 字节,其中 b2 的长度为 6416,当我添加时
int diffcount = 0;
for (int x = 0; x < b2.Length; x++)
{
if(x > b.Length-1 || b[x]!=b2[x])
diffcount++;
}
difffcount 结果是 5572
任何想法如何让 xmldocument 保留字节值? 谢谢
【问题讨论】:
-
使用真正的 diff 机制,具体的变化是什么? :-) 只有 6 个字节,我想这将是用于表示 XML 不安全构造的特定编码的变化(如果差异计数为 ~6410,我想添加 Unicode 控制数据)。
-
是的,你是对的......我做了更多的查看,发现在属性关闭引号后没有空格的自关闭元素和 /> 获得由 XmlDocument 添加的空格
-
有没有办法让 XmlDocument 保留空白。在这种情况下,将 preservewhitespace 设置为 true 似乎并没有多大作用
标签: c# xmldocument