我需要在上執行GET/PUT/DELETE/POST
消息httpwebrequest。C#.NET在一臺機器上加密XML並在其他機器上解密
我的請求正文包含XML。
我需要加密身體XML的內容和解密回客戶端/接收端。
我看到有多種方法來加密XML。 其中之一就是這裏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);
關注這是什麼關鍵,將不同的機器,不同架構,不同技術的客戶端能夠解密這個消息?
更新
後,我在幾個加密方法的研究,我發現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關鍵。那麼它是如何解密的,它不需要解密密鑰。此解密是否也適用於其他機器。
感謝您的信息,我的要求是我必須通過httpwebrequest傳遞加密的XML,並且相同或不同平臺的接收者應該能夠接收和解密。我發現很難找到最簡單的方法,因爲這裏的發件人是一個,接收者是多個。所有接收者應該能夠解密。你能建議一個最好的方法嗎? – HaBo 2013-04-12 15:19:52
@Habo正如我所提到的,任何方法都可以在接收端工作。選擇取決於誰控制接收器併爲其編寫代碼。如果是你,那麼你可以選擇幾乎任何東西(我建議OpenPGP的使用簡單 - 它支持對稱和基於密鑰的加密)。 XMLEnc標準可能更難以使用,因爲它更復雜。 – 2013-04-12 17:31:55
我有控制權建議接收器遵循特定的編碼來解密XML。但是我不能將它們限制爲OS和編程語言或框架。我想這應該沒問題。現在讓我們說我更喜歡使用OpenPGP(聽起來這是最方便的方式)。你可以提供某種參考,我可以查找加密消息並將其解密。我感謝你的幫助。 – HaBo 2013-04-12 18:16:24