2011-01-12 13 views
2

私はstringの形式で取得する2つのXMLを比較する必要があります。属性が別の順序でリストされている場合には失敗するため、XMLとの違いを考慮したくないため、文字列を比較するだけでは不十分です。暗号で安全なXMLコンパレータ

説明されているように、この問題のライブラリがいくつかありますが、セキュリティに関する追加の制約があります。 XMLは顧客データであるため、当社のセキュリティポリシーは、データ上で動作するすべての機能が暗号的に安全であることを要求しています。

私は必要なのは、暗号的に安全なXMLコンパレータだと思います。私はどこにも見当たりません。誰でもライブラリやコードサンプルの方に向けることができますか?C#.Netで、私は使用できますか、少なくとも見ることができますか?暗号化がSSL、AES、CAST5の形式であるかどうか、それが確立され、証明されている限り重要ではないもの。

+6

暗号化セキュリティは比較関数のコンテキストでは何も意味しません。ハッシュ、暗号化/復号化、署名、乱数生成関数などと話すときに興味のあるものです。 – bdonlan

+0

@bdonlan私はそれについて論じることはできませんが、私たちが持っている非常に厳しいコードポリシーを持っていますに従う。 (私は銀行にいる) – CSpangled

+8

あなたの会社のポリシーを再読してください。それが本当にそれを言うならば、担当者にもっと具体的なものになるように教えてください。暗号的に安全な比較のようなものはありません!アカウントのバランスを取るために「暗号で安全な追加」を使用していますか? ;-) –

答えて

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(); 
+0

これで十分だろうと私は確信しています。ありがとう! – CSpangled

+2

@ CSpangled:これは実際に意味のある意味で「安全」ではないことを理解する必要があります。セキュリティを確保する唯一の関係は、署名仕様の一部であるということです。http://www.w3.org/TR/xml-c14n –

+2

XMLを標準化するので、@ CSpangledは秘密の安全な文字列コンパレータを使用して残りの部分を解決できます問題のだからセキュリティポリシーを書いたPHBが安全な文字列の比較を望んでいるとすれば、これは問題を "解決"します:-) –

関連する問題