AesCryptoServiceProvider Class
Performs symmetric encryption and decryption using the Cryptographic Application Programming Interfaces (CAPI) implementation of the Advanced Encryption Standard (AES) algorithm.
Assembly: System.Core (in System.Core.dll)
System.Security.Cryptography.SymmetricAlgorithm
System.Security.Cryptography.Aes
System.Security.Cryptography.AesCryptoServiceProvider
| Name | Description | |
|---|---|---|
![]() | AesCryptoServiceProvider() | Initializes a new instance of the AesCryptoServiceProvider class. |
| Name | Description | |
|---|---|---|
![]() | BlockSize | Gets or sets the block size, in bits, of the cryptographic operation.(Inherited from SymmetricAlgorithm.) |
![]() | FeedbackSize | Gets or sets the feedback size, in bits, of the cryptographic operation.(Inherited from SymmetricAlgorithm.) |
![]() | IV | Gets or sets the initialization vector (IV) for the symmetric algorithm.(Inherited from SymmetricAlgorithm.) |
![]() | Key | Gets or sets the symmetric key that is used for encryption and decryption.(Overrides SymmetricAlgorithm.Key.) |
![]() | KeySize | Gets or sets the size, in bits, of the secret key. (Overrides SymmetricAlgorithm.KeySize.) |
![]() | LegalBlockSizes | Gets the block sizes, in bits, that are supported by the symmetric algorithm.(Inherited from SymmetricAlgorithm.) |
![]() | LegalKeySizes | Gets the key sizes, in bits, that are supported by the symmetric algorithm.(Inherited from SymmetricAlgorithm.) |
![]() | Mode | Gets or sets the mode for operation of the symmetric algorithm.(Inherited from SymmetricAlgorithm.) |
![]() | Padding | Gets or sets the padding mode used in the symmetric algorithm.(Inherited from SymmetricAlgorithm.) |
| Name | Description | |
|---|---|---|
![]() | Clear() | Releases all resources used by the SymmetricAlgorithm class.(Inherited from SymmetricAlgorithm.) |
![]() | CreateDecryptor() | Creates a symmetric AES decryptor object using the current key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateDecryptor().) |
![]() | CreateDecryptor(Byte[], Byte[]) | Creates a symmetric AES decryptor object using the specified key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateDecryptor(Byte[], Byte[]).) |
![]() | CreateEncryptor() | Creates a symmetric AES encryptor object using the current key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateEncryptor().) |
![]() | CreateEncryptor(Byte[], Byte[]) | Creates a symmetric encryptor object using the specified key and initialization vector (IV).(Overrides SymmetricAlgorithm.CreateEncryptor(Byte[], Byte[]).) |
![]() | Dispose() | Releases all resources used by the current instance of the SymmetricAlgorithm class.(Inherited from SymmetricAlgorithm.) |
![]() | Equals(Object) | Determines whether the specified object is equal to the current object.(Inherited from Object.) |
![]() | GenerateIV() | Generates a random initialization vector (IV) to use for the algorithm.(Overrides SymmetricAlgorithm.GenerateIV().) |
![]() | GenerateKey() | Generates a random key to use for the algorithm. (Overrides SymmetricAlgorithm.GenerateKey().) |
![]() | GetHashCode() | Serves as the default hash function. (Inherited from Object.) |
![]() | GetType() | |
![]() | ToString() | Returns a string that represents the current object.(Inherited from Object.) |
![]() | ValidKeySize(Int32) | Determines whether the specified key size is valid for the current algorithm.(Inherited from SymmetricAlgorithm.) |
The following example demonstrates how to encrypt and decrypt sample data using the AesCryptoServiceProvider 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 AesCryptoServiceProvider // class. This generates a new key and initialization // vector (IV). using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider()) { // 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 AesCryptoServiceProvider object // with the specified key and IV. using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider()) { 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 AesCryptoServiceProvider object // with the specified key and IV. using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider()) { 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; } } }
Available since 3.5
Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

