我需要比较两个XML,我以string
的形式得到它们。我不能只比较字符串,因为当属性以不同的顺序列出时会失败,我不想考虑与XML的区别。
如上所述,此问题存在多个库,但我对安全性有其他限制。由于XML是客户数据,因此我们公司的安全策略要求对数据进行操作的所有功能都是加密安全的。
所以我想我需要的是一个加密安全的XML比较器,我似乎无法在任何地方找到它。任何人都可以指向我的图书馆或代码样本,最好是在C#.Net,我可以使用或至少看看?密码学是以SSL,AES,CAST5还是其他形式存在,只要它已经建立并得到证实就不重要。
答案 0 :(得分:3)
将XML转换为Canonical XML或Exclusive Canonical XML并执行二进制比较。这些规范化算法用于XML-DSIG,因此它们应该被称为“加密安全”。
您可以使用以下内容:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
System.Security.Cryptography.Xml.Transform t = new System.Security.Cryptography.Xml.XmlDsigC14NTransform();
// or System.Security.Cryptography.Xml.XmlDsigExcC14NTransform
t.Resolver = null;
t.LoadInput(doc);
Stream stream = (Stream)t.GetOutput(typeof(Stream));
string canonicalXml = new StreamReader(stream).ReadToEnd();