AesManaged Class

 
System_CAPS_noteNote

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Provides a managed implementation of the Advanced Encryption Standard (AES) symmetric algorithm.

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


public sealed class AesManaged : Aes

NameDescription
System_CAPS_pubmethodAesManaged()

Initializes a new instance of the AesManaged 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 number of bits to use as feedback. (Overrides SymmetricAlgorithm.FeedbackSize.)

System_CAPS_pubpropertyIV

Gets or sets the initialization vector (IV) to use for the symmetric algorithm. (Overrides SymmetricAlgorithm.IV.)

System_CAPS_pubpropertyKey

Gets or sets the secret key used for the symmetric algorithm.(Overrides SymmetricAlgorithm.Key.)

System_CAPS_pubpropertyKeySize

Gets or sets the size, in bits, of the secret key used for the symmetric algorithm. (Overrides SymmetricAlgorithm.KeySize.)

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.(Overrides SymmetricAlgorithm.Mode.)

System_CAPS_pubpropertyPadding

Gets or sets the padding mode used in the symmetric algorithm. (Overrides SymmetricAlgorithm.Padding.)

NameDescription
System_CAPS_pubmethodClear()

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

System_CAPS_pubmethodCreateDecryptor()

Creates a symmetric decryptor object using the current key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateDecryptor().)

System_CAPS_pubmethodCreateDecryptor(Byte[], Byte[])

Creates a symmetric decryptor object using the specified key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateDecryptor(Byte[], Byte[]).)

System_CAPS_pubmethodCreateEncryptor()

Creates a symmetric encryptor object using the current key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateEncryptor().)

System_CAPS_pubmethodCreateEncryptor(Byte[], Byte[])

Creates a symmetric encryptor object using the specified key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateEncryptor(Byte[], 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 use for the symmetric algorithm.(Overrides SymmetricAlgorithm.GenerateIV().)

System_CAPS_pubmethodGenerateKey()

Generates a random key to use for the symmetric 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.)

The AES algorithm is essentially the Rijndael symmetric algorithm with a fixed block size and iteration count. This class functions the same way as the RijndaelManaged class but limits blocks to 128 bits and does not allow feedback modes.

System_CAPS_noteNote

If the Windows security policy setting for Federal Information Processing Standards (FIPS)-compliant algorithms is enabled, using this algorithm throws a CryptographicException.

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

using System;
using System.IO;
using System.Security.Cryptography;

namespace Aes_Example
{
    class AesExample
    {
        public static void Main()
        {
            try
            {

                string original = "Here is some data to encrypt!";

                // Create a new instance of the AesManaged
                // class.  This generates a new key and initialization 
                // vector (IV).
                using (AesManaged myAes = new AesManaged())
                {

                    // Encrypt the string to an array of bytes.
                    byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV);

                    // Decrypt the bytes to a string.
                    string roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.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);
            }
        }
        static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;
            // Create an AesManaged object
            // with the specified key and IV.
            using (AesManaged aesAlg = new AesManaged())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;

                // Create a decrytor to perform the stream transform.
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {

                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }


            // Return the encrypted bytes from the memory stream.
            return encrypted;

        }

        static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            if (cipherText == null || cipherText.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");

            // Declare the string used to hold
            // the decrypted text.
            string plaintext = null;

            // Create an AesManaged object
            // with the specified key and IV.
            using (AesManaged aesAlg = new AesManaged())
            {
                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.
                using (MemoryStream msDecrypt = new MemoryStream(cipherText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {

                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }

            }

            return plaintext;

        }
    }
}

.NET Framework
Available since 3.5
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0

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: