EncryptionMethod Class
Encapsulates the encryption algorithm used for XML encryption.
Assembly: System.Security (in System.Security.dll)
The EncryptionMethod type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | EncryptionMethod() | Initializes a new instance of the EncryptionMethod class. |
![]() | EncryptionMethod(String) | Initializes a new instance of the EncryptionMethod class specifying an algorithm Uniform Resource Identifier (URI). |
| Name | Description | |
|---|---|---|
![]() | KeyAlgorithm | Gets or sets a Uniform Resource Identifier (URI) that describes the algorithm to use for XML encryption. |
![]() | KeySize | Gets or sets the algorithm key size used for XML encryption. |
| Name | Description | |
|---|---|---|
![]() | Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | GetXml | Returns an XmlElement object that encapsulates an instance of the EncryptionMethod class. |
![]() | LoadXml | Parses the specified XmlElement object and configures the internal state of the EncryptionMethod object to match. |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() | ToString | Returns a string that represents the current object. (Inherited from Object.) |
The <EncryptionMethod> tag uses a Uniform Resource Identifier (URI) to identify the encryption algorithm that must be used to decrypt XML data. The EncryptionMethod class encapsulates the <EncryptionMethod> tag defined by the World Wide Web Consortium XML Encryption specification located at http://www.w3.org/TR/xmlenc-core/.
Use the EncryptionMethod class to identify the encryption algorithm associated with the EncryptedData element or the EncryptedKey element.
Use one of the URI identifiers defined by the World Wide Web Consortium XML Encryption specification located at http://www.w3.org/TR/xmlenc-core/. All URI identifiers are accessible as static fields of the EncryptedXml class.
Note |
|---|
The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: MayLeakOnAbort. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes. |
The following code example demonstrates how to create a simple utility class that uses the TripleDES algorithm to encrypt an XML document.
#using <System.Security.dll> #using <System.dll> #using <System.Xml.dll> using namespace System; using namespace System::Xml; using namespace System::Security::Cryptography; using namespace System::Security::Cryptography::Xml; ref class TrippleDESDocumentEncryption { protected: XmlDocument^ docValue; TripleDES^ algValue; public: TrippleDESDocumentEncryption( XmlDocument^ Doc, TripleDES^ Key ) { if ( Doc != nullptr ) { docValue = Doc; } else { throw gcnew ArgumentNullException( L"Doc" ); } if ( Key != nullptr ) { algValue = Key; } else { throw gcnew ArgumentNullException( L"Key" ); } } property XmlDocument^ Doc { XmlDocument^ get() { return docValue; } void set( XmlDocument^ value ) { docValue = value; } } property TripleDES^ Alg { TripleDES^ get() { return algValue; } void set( TripleDES^ value ) { algValue = value; } } void Clear() { if ( algValue != nullptr ) { algValue->Clear(); } else { throw gcnew Exception( L"No TripleDES key was found to clear." ); } } void Encrypt( String^ Element ) { // Find the element by name and create a new // XmlElement object. XmlElement^ inputElement = dynamic_cast<XmlElement^>(docValue->GetElementsByTagName( Element )->Item( 0 )); // If the element was not found, throw an exception. if ( inputElement == nullptr ) { throw gcnew Exception( L"The element was not found." ); } // Create a new EncryptedXml object. EncryptedXml^ exml = gcnew EncryptedXml( docValue ); // Encrypt the element using the symmetric key. array<Byte>^rgbOutput = exml->EncryptData( inputElement, algValue, false ); // Create an EncryptedData object and populate it. EncryptedData^ ed = gcnew EncryptedData; // Specify the namespace URI for XML encryption elements. ed->Type = EncryptedXml::XmlEncElementUrl; // Specify the namespace URI for the TrippleDES algorithm. ed->EncryptionMethod = gcnew EncryptionMethod( EncryptedXml::XmlEncTripleDESUrl ); // Create a CipherData element. ed->CipherData = gcnew CipherData; // Set the CipherData element to the value of the encrypted XML element. ed->CipherData->CipherValue = rgbOutput; // Replace the plaintext XML elemnt with an EncryptedData element. EncryptedXml::ReplaceElement( inputElement, ed, false ); } void Decrypt() { // XmlElement object. XmlElement^ encryptedElement = dynamic_cast<XmlElement^>(docValue->GetElementsByTagName( L"EncryptedData" )->Item( 0 )); // If the EncryptedData element was not found, throw an exception. if ( encryptedElement == nullptr ) { throw gcnew Exception( L"The EncryptedData element was not found." ); } // Create an EncryptedData object and populate it. EncryptedData^ ed = gcnew EncryptedData; ed->LoadXml( encryptedElement ); // Create a new EncryptedXml object. EncryptedXml^ exml = gcnew EncryptedXml; // Decrypt the element using the symmetric key. array<Byte>^rgbOutput = exml->DecryptData( ed, algValue ); // Replace the encryptedData element with the plaintext XML elemnt. exml->ReplaceData( encryptedElement, rgbOutput ); } }; int main() { // Create an XmlDocument object. XmlDocument^ xmlDoc = gcnew XmlDocument; // Load an XML file into the XmlDocument object. try { xmlDoc->PreserveWhitespace = true; xmlDoc->Load( L"test.xml" ); } catch ( Exception^ e ) { Console::WriteLine( e->Message ); return 0; } // Create a new TripleDES key. TripleDESCryptoServiceProvider^ tDESkey = gcnew TripleDESCryptoServiceProvider; // Create a new instance of the TrippleDESDocumentEncryption object // defined in this sample. TrippleDESDocumentEncryption^ xmlTDES = gcnew TrippleDESDocumentEncryption( xmlDoc,tDESkey ); try { // Encrypt the "creditcard" element. xmlTDES->Encrypt( L"creditcard" ); // Display the encrypted XML to the console. Console::WriteLine( L"Encrypted XML:" ); Console::WriteLine(); Console::WriteLine( xmlTDES->Doc->OuterXml ); // Decrypt the "creditcard" element. xmlTDES->Decrypt(); // Display the encrypted XML to the console. Console::WriteLine(); Console::WriteLine( L"Decrypted XML:" ); Console::WriteLine(); Console::WriteLine( xmlTDES->Doc->OuterXml ); } catch ( Exception^ e ) { Console::WriteLine( e->Message ); } finally { // Clear the TripleDES key. xmlTDES->Clear(); } return 1; }
The following code example demonstrates how to encrypt an XML document using a symmetric key. This example does not include any key information in the encrypted XML document.
#using <System.Security.dll> #using <System.dll> #using <System.Xml.dll> using namespace System; using namespace System::Xml; using namespace System::Security::Cryptography; using namespace System::Security::Cryptography::Xml; static void Encrypt( XmlDocument^ Doc, String^ ElementToEncrypt, SymmetricAlgorithm^ Alg ) { // Check the arguments. if ( Doc == nullptr ) throw gcnew ArgumentNullException( L"Doc" ); if ( ElementToEncrypt == nullptr ) throw gcnew ArgumentNullException( L"ElementToEncrypt" ); if ( Alg == nullptr ) throw gcnew ArgumentNullException( L"Alg" ); //////////////////////////////////////////////// // Find the specified element in the XmlDocument // object and create a new XmlElemnt object. //////////////////////////////////////////////// XmlElement^ elementToEncrypt = dynamic_cast<XmlElement^>(Doc->GetElementsByTagName( ElementToEncrypt )->Item( 0 )); // Throw an XmlException if the element was not found. if ( elementToEncrypt == nullptr ) { throw gcnew XmlException( L"The specified element was not found" ); } ////////////////////////////////////////////////// // Create a new instance of the EncryptedXml class // and use it to encrypt the XmlElement with the // symmetric key. ////////////////////////////////////////////////// EncryptedXml^ eXml = gcnew EncryptedXml; array<Byte>^encryptedElement = eXml->EncryptData( elementToEncrypt, Alg, false ); //////////////////////////////////////////////// // Construct an EncryptedData object and populate // it with the desired encryption information. //////////////////////////////////////////////// EncryptedData^ edElement = gcnew EncryptedData; edElement->Type = EncryptedXml::XmlEncElementUrl; // Create an EncryptionMethod element so that the // receiver knows which algorithm to use for decryption. // Determine what kind of algorithm is being used and // supply the appropriate URL to the EncryptionMethod element. String^ encryptionMethod = nullptr; if ( dynamic_cast<TripleDES^>(Alg) ) { encryptionMethod = EncryptedXml::XmlEncTripleDESUrl; } else if ( dynamic_cast<DES^>(Alg) ) { encryptionMethod = EncryptedXml::XmlEncDESUrl; } else if ( dynamic_cast<Rijndael^>(Alg) ) { switch ( Alg->KeySize ) { case 128: encryptionMethod = EncryptedXml::XmlEncAES128Url; break; case 192: encryptionMethod = EncryptedXml::XmlEncAES192Url; break; case 256: encryptionMethod = EncryptedXml::XmlEncAES256Url; break; } } else { // Throw an exception if the transform is not in the previous categories throw gcnew CryptographicException( L"The specified algorithm is not supported for XML Encryption." ); } edElement->EncryptionMethod = gcnew EncryptionMethod( encryptionMethod ); // Add the encrypted element data to the // EncryptedData object. edElement->CipherData->CipherValue = encryptedElement; //////////////////////////////////////////////////// // Replace the element from the original XmlDocument // object with the EncryptedData element. //////////////////////////////////////////////////// EncryptedXml::ReplaceElement( elementToEncrypt, edElement, false ); } static void Decrypt( XmlDocument^ Doc, SymmetricAlgorithm^ Alg ) { // Check the arguments. if ( Doc == nullptr ) throw gcnew ArgumentNullException( L"Doc" ); if ( Alg == nullptr ) throw gcnew ArgumentNullException( L"Alg" ); // Find the EncryptedData element in the XmlDocument. XmlElement^ encryptedElement = dynamic_cast<XmlElement^>(Doc->GetElementsByTagName( L"EncryptedData" )->Item( 0 )); // If the EncryptedData element was not found, throw an exception. if ( encryptedElement == nullptr ) { throw gcnew XmlException( L"The EncryptedData element was not found." ); } // Create an EncryptedData object and populate it. EncryptedData^ edElement = gcnew EncryptedData; edElement->LoadXml( encryptedElement ); // Create a new EncryptedXml object. EncryptedXml^ exml = gcnew EncryptedXml; // Decrypt the element using the symmetric key. array<Byte>^rgbOutput = exml->DecryptData( edElement, Alg ); // Replace the encryptedData element with the plaintext XML element. exml->ReplaceData( encryptedElement, rgbOutput ); } int main() { // Create an XmlDocument object. XmlDocument^ xmlDoc = gcnew XmlDocument; // Load an XML file into the XmlDocument object. try { xmlDoc->PreserveWhitespace = true; xmlDoc->Load( L"test.xml" ); } catch ( Exception^ e ) { Console::WriteLine( e->Message ); return 0; } // Create a new TripleDES key. TripleDESCryptoServiceProvider^ tDESkey = gcnew TripleDESCryptoServiceProvider; try { // Encrypt the "creditcard" element. Encrypt( xmlDoc, L"creditcard", tDESkey ); // Display the encrypted XML to the console. Console::WriteLine( L"Encrypted XML:" ); Console::WriteLine(); Console::WriteLine( xmlDoc->OuterXml ); // Decrypt the "creditcard" element. Decrypt( xmlDoc, tDESkey ); // Display the encrypted XML to the console. Console::WriteLine(); Console::WriteLine( L"Decrypted XML:" ); Console::WriteLine(); Console::WriteLine( xmlDoc->OuterXml ); } catch ( Exception^ e ) { Console::WriteLine( e->Message ); } finally { // Clear the TripleDES key. tDESkey->Clear(); } }
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
