Encryption NET在一台机器上加密XML,在另一台机器上解密

Encryption NET在一台机器上加密XML,在另一台机器上解密,encryption,x509,x509certificate2,xml-encryption,Encryption,X509,X509certificate2,Xml Encryption,我需要在httpwebrequest上执行GET/PUT/DELETE/POST消息 我的请求体包含XML 我需要加密正文XML中的内容,并解密返回客户端/接收方 我看到有多种加密XML的方法。 其中一个在这里 但我担心的是,接收者应该能够解密它。不同平台上的接收器应该是dbe,但可能不在.NET framework上 有谁能提出一个最好的解决办法吗 到目前为止,我所尝试的: //创建一个新的Rijndael密钥 key = new RijndaelManaged();

我需要在httpwebrequest上执行
GET/PUT/DELETE/POST
消息

我的请求体包含XML

我需要加密正文XML中的内容,并解密返回客户端/接收方

我看到有多种加密XML的方法。 其中一个在这里

但我担心的是,接收者应该能够解密它。不同平台上的接收器应该是dbe,但可能不在.NET framework上

有谁能提出一个最好的解决办法吗

到目前为止,我所尝试的:

//创建一个新的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密钥。那么它是如何解密的呢?它不需要密码和密钥来解密吗。这种解密也能在其他机器上工作。

有几种加密方法

对称加密使用相同的密钥加密和解密数据。AES加密算法就是这种加密的一个例子

非对称(基于公钥和私钥)加密使用一对密钥。在此模式下,您可以使用公钥为某人加密数据。他使用他的私钥(你没有也不应该有)来解密为他准备的数据。非对称加密是使用基于证书的PKCS#7/CMS标准或使用OpenPGP实现的

现在谈谈XML。您可以使用上述方法之一对其进行加密,就像它是二进制数据一样。或者可以使用XMLEnc标准对其进行加密

使用方式取决于谁决定或要求加密格式和方法。如果是您做出决策,那么决策应该基于双方可以使用哪些功能(库、代码)以及如何管理密钥(PKI比对称密钥更难管理,但一般来说PKI更安全)


请注意:我们的SecureBackbox产品在.NET、Java和其他平台上支持对称和基于证书的加密(包括二进制、XMLEnc和OpenPGP)

感谢您提供的信息,我的要求是,我必须通过httpwebrequest传递加密的XML,相同或不同平台的接收者应该能够接收和解密。我发现很难找到最简单的方法,因为这里发送者是一个,接收者是多个。所有接收器都应该能够解密。你们能推荐一个最好的方法吗?@Habo正如我提到的,任何方法都适用于接收端。选择取决于谁控制接收器并为其编写代码。如果是你,那么你几乎可以选择任何东西(为了使用简单,我建议使用OpenPGP——它支持对称加密和基于密钥的加密)。XMLEnc标准可能更难使用,因为它更复杂。我可以控制建议接收者遵循特定的编码来解密XML。但我不能将它们限制在和操作系统、编程语言或框架上。我想应该没问题。现在让我们假设我更喜欢使用OpenPGP(听起来这是最方便的方式)。你们能提供一些参考资料吗?我可以在这些资料中查找加密信息并将其解密回来。我很感谢你在这方面的帮助。虽然这并没有给我语法上的帮助。它给它投下了一些光。谢谢