RijndaelManaged Class

 

Accesses the managed version of the Rijndael algorithm. This class cannot be inherited.

Namespace:   System.Security.Cryptography
Assembly:  mscorlib (in mscorlib.dll)

System::Object
  System.Security.Cryptography::SymmetricAlgorithm
    System.Security.Cryptography::Rijndael
      System.Security.Cryptography::RijndaelManaged

[ComVisibleAttribute(true)]
public ref class RijndaelManaged sealed : Rijndael

NameDescription
System_CAPS_pubmethodRijndaelManaged()

Initializes a new instance of the RijndaelManaged class.

NameDescription
System_CAPS_pubpropertyBlockSize

Gets or sets the block size, in bits, of the cryptographic operation.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyFeedbackSize

Gets or sets the feedback size, in bits, of the cryptographic operation.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyIV

Gets or sets the initialization vector (IV) for the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyKey

Gets or sets the secret key for the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyKeySize

Gets or sets the size, in bits, of the secret key used by the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyLegalBlockSizes

Gets the block sizes, in bits, that are supported by the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyLegalKeySizes

Gets the key sizes, in bits, that are supported by the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyMode

Gets or sets the mode for operation of the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubpropertyPadding

Gets or sets the padding mode used in the symmetric algorithm.(Inherited from SymmetricAlgorithm.)

NameDescription
System_CAPS_pubmethodClear()

Releases all resources used by the SymmetricAlgorithm class.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubmethodCreateDecryptor()

Creates a symmetric decryptor object with the current Key property and initialization vector (IV).(Inherited from SymmetricAlgorithm.)

System_CAPS_pubmethodCreateDecryptor(array<Byte>^, array<Byte>^)

Creates a symmetric Rijndael decryptor object with the specified Key and initialization vector (IV).(Overrides SymmetricAlgorithm::CreateDecryptor(array<Byte>^, array<Byte>^).)

System_CAPS_pubmethodCreateEncryptor()

Creates a symmetric encryptor object with the current Key property and initialization vector (IV).(Inherited from SymmetricAlgorithm.)

System_CAPS_pubmethodCreateEncryptor(array<Byte>^, array<Byte>^)

Creates a symmetric Rijndael encryptor object with the specified Key and initialization vector (IV).(Overrides SymmetricAlgorithm::CreateEncryptor(array<Byte>^, array<Byte>^).)

System_CAPS_pubmethodDispose()

Releases all resources used by the current instance of the SymmetricAlgorithm class.(Inherited from SymmetricAlgorithm.)

System_CAPS_pubmethodEquals(Object^)

Determines whether the specified object is equal to the current object.(Inherited from Object.)

System_CAPS_pubmethodGenerateIV()

Generates a random initialization vector (IV) to be used for the algorithm.(Overrides SymmetricAlgorithm::GenerateIV().)

System_CAPS_pubmethodGenerateKey()

Generates a random Key to be used for the algorithm.(Overrides SymmetricAlgorithm::GenerateKey().)

System_CAPS_pubmethodGetHashCode()

Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_pubmethodToString()

Returns a string that represents the current object.(Inherited from Object.)

System_CAPS_pubmethodValidKeySize(Int32)

Determines whether the specified key size is valid for the current algorithm.(Inherited from SymmetricAlgorithm.)

This algorithm supports key lengths of 128, 192, or 256 bits.

The following example demonstrates how to encrypt and decrypt sample data using the RijndaelManaged class.

#using <System.dll>

using namespace System;
using namespace System::IO;
using namespace System::Security::Cryptography;


class RijndaelMemoryExample
{
public:
    static array<Byte>^ encryptStringToBytes_AES(String^ plainText, array<Byte>^ Key, array<Byte>^ IV)
    {
        // Check arguments.
        if (!plainText || plainText->Length <= 0)
            throw gcnew ArgumentNullException("plainText");
        if (!Key || Key->Length <= 0)
            throw gcnew ArgumentNullException("Key");
        if (!IV  || IV->Length <= 0)
            throw gcnew ArgumentNullException("IV");

        // Declare the streams used
        // to encrypt to an in memory
        // array of bytes.
		MemoryStream^   msEncrypt;
        CryptoStream^   csEncrypt;
        StreamWriter^   swEncrypt;

        // Declare the RijndaelManaged object
        // used to encrypt the data.
        RijndaelManaged^ aesAlg;

        try
        {
            // Create a RijndaelManaged object
            // with the specified key and IV.
            aesAlg = gcnew RijndaelManaged();
			aesAlg->Padding = PaddingMode::PKCS7;
            aesAlg->Key = Key;
            aesAlg->IV = IV;

            // Create an encryptor to perform the stream transform.
            ICryptoTransform^ encryptor = aesAlg->CreateEncryptor(aesAlg->Key, aesAlg->IV);

            // Create the streams used for encryption.
            msEncrypt = gcnew MemoryStream();
			csEncrypt = gcnew CryptoStream(msEncrypt, encryptor, CryptoStreamMode::Write);
            swEncrypt = gcnew StreamWriter(csEncrypt);

            //Write all data to the stream.
            swEncrypt->Write(plainText);
			swEncrypt->Flush();
			csEncrypt->FlushFinalBlock();
			msEncrypt->Flush();
        }
        finally
        {
            // Clean things up.

            // Close the streams.
            if(swEncrypt)
                swEncrypt->Close();
            if (csEncrypt)
                csEncrypt->Close();


            // Clear the RijndaelManaged object.
            if (aesAlg)
                aesAlg->Clear();
        }

        // Return the encrypted bytes from the memory stream.
        return msEncrypt->ToArray();
    }

    static String^ decryptStringFromBytes_AES(array<Byte>^ cipherText, array<Byte>^ Key, array<Byte>^ IV)
    {
        // Check arguments.
        if (!cipherText || cipherText->Length <= 0)
            throw gcnew ArgumentNullException("cipherText");
        if (!Key || Key->Length <= 0)
            throw gcnew ArgumentNullException("Key");
        if (!IV || IV->Length <= 0)
            throw gcnew ArgumentNullException("IV");

        // TDeclare the streams used
        // to decrypt to an in memory
        // array of bytes.
        MemoryStream^ msDecrypt;
        CryptoStream^ csDecrypt;
        StreamReader^ srDecrypt;

        // Declare the RijndaelManaged object
        // used to decrypt the data.
        RijndaelManaged^ aesAlg;

        // Declare the string used to hold
        // the decrypted text.
        String^ plaintext;

        try
        {
            // Create a RijndaelManaged object
            // with the specified key and IV.
            aesAlg = gcnew RijndaelManaged();
			aesAlg->Padding = PaddingMode::PKCS7;
            aesAlg->Key = Key;
            aesAlg->IV = IV;

            // Create a decrytor to perform the stream transform.
			ICryptoTransform^ decryptor = aesAlg->CreateDecryptor(aesAlg->Key, aesAlg->IV);

            // Create the streams used for decryption.
            msDecrypt = gcnew MemoryStream(cipherText);
			csDecrypt = gcnew CryptoStream(msDecrypt, decryptor, CryptoStreamMode::Read);
            srDecrypt = gcnew StreamReader(csDecrypt);

            // Read the decrypted bytes from the decrypting stream
            // and place them in a string.
            plaintext = srDecrypt->ReadToEnd();
        }
        finally
        {
            // Clean things up.

            // Close the streams.
            if (srDecrypt)
                srDecrypt->Close();
            if (csDecrypt)
                csDecrypt->Close();
            if (msDecrypt)
                msDecrypt->Close();

            // Clear the RijndaelManaged object.
            if (aesAlg)
                aesAlg->Clear();
        }

        return plaintext;
    }
};

int main()
{
    try
    {
        String^ original = "Here is some data to encrypt!";

        // Create a new instance of the RijndaelManaged
        // class.  This generates a new key and initialization
        // vector (IV).
        RijndaelManaged^ myRijndael = gcnew RijndaelManaged();

        // Encrypt the string to an array of bytes.
		array<Byte>^ encrypted = RijndaelMemoryExample::encryptStringToBytes_AES(original, myRijndael->Key, myRijndael->IV);

        // Decrypt the bytes to a string.
        String^ roundtrip = RijndaelMemoryExample::decryptStringFromBytes_AES(encrypted, myRijndael->Key, myRijndael->IV);

        //Display the original data and the decrypted data.
		Console::WriteLine("Original:   {0}", original);
		Console::WriteLine("Round Trip: {0}", roundtrip);
    }
    catch (Exception^ e)
    {
		Console::WriteLine("Error: {0}", e->Message);
    }

	return 0;
}

.NET Framework
Available since 1.1

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show: