0

httpwebrequestGET/PUT/DELETE/POSTでメッセージを送信する必要があります。

リクエストの本文に XML が含まれています。

本文 XML のコンテンツを暗号化し、クライアント/レシーバー側で復号化する必要があります。

XML を暗号化する方法は複数あるようです。そのうちの1つはここにありますhttp://msdn.microsoft.com/en-us/library/sb7w85t6.aspx

しかし、私の懸念は、受信者がそれを解読できるはずだということです。レシーバーは異なるプラットフォーム上にある必要があり、.NET フレームワーク上にない場合があります。

誰でもこれに対する最善のアプローチを提案できますか?

私がこれまでに試したこと:

// 新しい Rijndael キーを作成します。

            key = new RijndaelManaged();
            // Load an XML document.
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.PreserveWhitespace = true;
            xmlDoc.Load("test.xml");

            // Encrypt the "creditcard" element.
            Encrypt(xmlDoc, "creditcard", key);

            Console.WriteLine("The element was encrypted");

            Console.WriteLine(xmlDoc.InnerXml);

            Decrypt(xmlDoc, key);

            Console.WriteLine("The element was decrypted");

            Console.WriteLine(xmlDoc.InnerXml);

これは仕事をしているように見えます。でも鍵が気になる

 key = new RijndaelManaged();
Decrypt(xmlDoc, key);

このKeyとは何ですか?別のマシン、別のフレームワーク、別のテクノロジのクライアントは、このメッセージを解読できますか?

アップデート

いくつかの暗号化方法について調査した結果、X509Certificate2 が最適な暗号化オプションであり、同じ X509 証明書がマシンにインストールされている場合、クライアントもそれを復号化できることがわかりました。暗号化するスクリプトを見つけることができました

public static void Encrypt(XmlDocument Doc, string ElementToEncrypt, X509Certificate2 Cert)
        {
            // Check the arguments.   
            if (Doc == null)
                throw new ArgumentNullException("Doc");
            if (ElementToEncrypt == null)
                throw new ArgumentNullException("ElementToEncrypt");
            if (Cert == null)
                throw new ArgumentNullException("Cert");

            XmlElement elementToEncrypt = Doc.GetElementsByTagName(ElementToEncrypt)[0] as XmlElement;
            // Throw an XmlException if the element was not found. 
            if (elementToEncrypt == null)
            {
                throw new XmlException("The specified element was not found");

            }

            EncryptedXml eXml = new EncryptedXml();

            // Encrypt the element.
            EncryptedData edElement = eXml.Encrypt(elementToEncrypt, Cert);
            EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);
        }

復号化するこのコードが見つかった場合

 public static void Decrypt(XmlDocument Doc)
        {
            // Check the arguments.   
            if (Doc == null)
                throw new ArgumentNullException("Doc");

            // Create a new EncryptedXml object.
            EncryptedXml exml = new EncryptedXml(Doc);

            // Decrypt the XML document.
            exml.DecryptDocument();
        }

私の質問は、この復号化方法は X509 キーを要求していないということです。では、どのように復号化するのでしょうか。復号化するための鍵は必要ありませんか。この復号化は他のマシンでも機能しますか。

4

1 に答える 1

1

暗号化にはいくつかのアプローチがあります。

対称暗号化では、データの暗号化と復号化に同じキーを使用します。AES 暗号化アルゴリズムは、そのような暗号化の一例です。

非対称 (公開鍵と秘密鍵に基づく) 暗号化では、鍵のペアが使用されます。このモードでは、誰かの公開鍵を使用してデータを暗号化します。彼は自分の秘密鍵 (あなたが持っておらず、持つべきではない) を使用して、彼のために準備されたデータを復号化します。非対称暗号化は、証明書ベースの PKCS#7 / CMS 標準または OpenPGP を使用して実現されます。

次に XML についてです。上記のいずれかの方法を使用して、バイナリ データであるかのように暗号化できます。または、XMLEnc 標準を使用して暗号化することもできます。

暗号化の形式や方法を誰が決めるか、あるいは要求するかによって、使い方が異なります。決定を下すのがあなたである場合、決定は、両側が使用できる機能 (ライブラリ、コード) とキーの管理方法に基づいている必要があります (PKI は対称キーよりも管理が少し難しいですが、一般的に PKI はより安全)。

注意: 当社の SecureBlackbox 製品は、.NET、Java、およびその他のプラットフォームで対称暗号化と証明書ベースの暗号化 (バイナリ、XMLEnc、および OpenPGP の両方) をサポートしています。

于 2013-04-12T14:57:10.230 に答える