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 キーを要求していないということです。では、どのように復号化するのでしょうか。復号化するための鍵は必要ありませんか。この復号化は他のマシンでも機能しますか。