Aes 類別

定義

代表抽象基底類別,進階加密標準 (AES) 的所有實作都必須從它繼承。

C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public abstract class Aes : System.Security.Cryptography.SymmetricAlgorithm
C#
public abstract class Aes : System.Security.Cryptography.SymmetricAlgorithm
繼承
衍生
屬性

範例

下列範例示範如何使用 類別來加密和解密範例數據 Aes

C#
using System;
using System.IO;
using System.Security.Cryptography;

namespace Aes_Example
{
    class AesExample
    {
        public static void Main()
        {
            string original = "Here is some data to encrypt!";

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

                // 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);
            }
        }
        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 Aes object
            // with the specified key and IV.
            using (Aes aesAlg = Aes.Create())
            {
                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.
                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 Aes object
            // with the specified key and IV.
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;

                // Create a decryptor 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;
        }
    }
}

建構函式

Aes()

初始化 Aes 類別的新執行個體。

欄位

BlockSizeValue

表示密碼編譯作業的區塊大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
FeedbackSizeValue

表示密碼編譯作業的回饋大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
IVValue

表示對稱演算法的初始化向量 (IV)。

(繼承來源 SymmetricAlgorithm)
KeySizeValue

表示對稱演算法使用之祕密金鑰的大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
KeyValue

表示對稱演算法的祕密金鑰。

(繼承來源 SymmetricAlgorithm)
LegalBlockSizesValue

指定對稱演算法所支援的區塊大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
LegalKeySizesValue

指定對稱演算法所支援的金鑰大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
ModeValue

表示對稱演算法中使用的密碼模式。

(繼承來源 SymmetricAlgorithm)
PaddingValue

表示對稱演算法中使用的填補模式。

(繼承來源 SymmetricAlgorithm)

屬性

BlockSize

取得或設定密碼編譯作業的區塊大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
FeedbackSize

取得或設定加密回饋 (CFB) 和輸出回饋 (OFB) 加密模式之密碼編譯作業的回饋大小 (以位元為單位)。

(繼承來源 SymmetricAlgorithm)
IV

取得或設定對稱演算法的初始化向量 (IV)。

(繼承來源 SymmetricAlgorithm)
Key

取得或設定對稱演算法的秘密金鑰。

(繼承來源 SymmetricAlgorithm)
KeySize

取得或設定對稱演算法使用之秘密金鑰的大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
LegalBlockSizes

取得對稱演算法所支援的區塊大小,以位元為單位。

LegalBlockSizes

取得對稱演算法所支援的區塊大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
LegalKeySizes

取得對稱演算法所支援的金鑰大小,以位元為單位。

LegalKeySizes

取得對稱演算法所支援的金鑰大小,以位元為單位。

(繼承來源 SymmetricAlgorithm)
Mode

取得或設定對稱演算法的作業模式。

(繼承來源 SymmetricAlgorithm)
Padding

取得或設定對稱演算法中使用的填補模式。

(繼承來源 SymmetricAlgorithm)

方法

Clear()

釋放 SymmetricAlgorithm 類別所使用的所有資源。

(繼承來源 SymmetricAlgorithm)
Create()

建立用來執行對稱演算法的密碼編譯物件。

Create(String)
已淘汰.

建立密碼編譯物件,指定執行對稱演算法所使用的 AES 實作。

CreateDecryptor()

使用目前的 Key 屬性和初始化向量 (IV),建立對稱解密子物件。

(繼承來源 SymmetricAlgorithm)
CreateDecryptor(Byte[], Byte[])

在衍生類別中覆寫時,使用指定的 Key 屬性和初始化向量 (IV) 建立對稱解密子物件。

(繼承來源 SymmetricAlgorithm)
CreateEncryptor()

使用目前的 Key 屬性和初始化向量 (IV),建立對稱加密子物件。

(繼承來源 SymmetricAlgorithm)
CreateEncryptor(Byte[], Byte[])

在衍生類別中覆寫時,使用指定的 Key 屬性和初始化向量 (IV) 建立對稱加密子物件。

(繼承來源 SymmetricAlgorithm)
DecryptCbc(Byte[], Byte[], PaddingMode)

使用 CBC 模式解密具有指定填補模式的數據。

(繼承來源 SymmetricAlgorithm)
DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

使用 CBC 模式解密具有指定填補模式的數據。

(繼承來源 SymmetricAlgorithm)
DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

使用 CBC 模式搭配指定的填補模式,將數據解密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
DecryptCfb(Byte[], Byte[], PaddingMode, Int32)

使用 CFB 模式解密具有指定填補模式和意見反應大小的數據。

(繼承來源 SymmetricAlgorithm)
DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

使用 CFB 模式解密具有指定填補模式和意見反應大小的數據。

(繼承來源 SymmetricAlgorithm)
DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

使用 CFB 模式搭配指定的填補模式和意見反應大小,將數據解密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
DecryptEcb(Byte[], PaddingMode)

使用 ECB 模式解密具有指定填補模式的數據。

(繼承來源 SymmetricAlgorithm)
DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

使用 ECB 模式解密具有指定填補模式的數據。

(繼承來源 SymmetricAlgorithm)
DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

使用 ECB 模式搭配指定的填補模式,將數據解密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
Dispose()

釋放 SymmetricAlgorithm 類別目前的執行個體所使用的全部資源。

(繼承來源 SymmetricAlgorithm)
Dispose(Boolean)

釋放 SymmetricAlgorithm 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 SymmetricAlgorithm)
EncryptCbc(Byte[], Byte[], PaddingMode)

使用 CBC 模式與指定的填補模式加密數據。

(繼承來源 SymmetricAlgorithm)
EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

使用 CBC 模式與指定的填補模式加密數據。

(繼承來源 SymmetricAlgorithm)
EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

使用 CBC 模式搭配指定的填補模式,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
EncryptCfb(Byte[], Byte[], PaddingMode, Int32)

使用 CFB 模式與指定的填補模式和意見反應大小來加密數據。

(繼承來源 SymmetricAlgorithm)
EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

使用 CFB 模式與指定的填補模式和意見反應大小來加密數據。

(繼承來源 SymmetricAlgorithm)
EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

使用 CFB 模式搭配指定的填補模式和意見反應大小,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
EncryptEcb(Byte[], PaddingMode)

使用 ECB 模式與指定的填補模式加密數據。

(繼承來源 SymmetricAlgorithm)
EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

使用 ECB 模式與指定的填補模式加密數據。

(繼承來源 SymmetricAlgorithm)
EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

使用 ECB 模式搭配指定的填補模式,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GenerateIV()

在衍生類別中覆寫時,產生要用於該演算法的隨機初始化向量 (IV)。

(繼承來源 SymmetricAlgorithm)
GenerateKey()

在衍生類別中覆寫時,產生要用於演算法的隨機金鑰 (Key)。

(繼承來源 SymmetricAlgorithm)
GetCiphertextLengthCbc(Int32, PaddingMode)

取得具有指定填補模式和 CBC 模式中純文字長度的加密文字長度。

(繼承來源 SymmetricAlgorithm)
GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

取得具有指定填補模式和 CFB 模式中純文字長度的加密文字長度。

(繼承來源 SymmetricAlgorithm)
GetCiphertextLengthEcb(Int32, PaddingMode)

取得具有指定填補模式和 ECB 模式中純文字長度的加密文字長度。

(繼承來源 SymmetricAlgorithm)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

嘗試使用 CBC 模式搭配指定的填補模式,將數據解密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryDecryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

在衍生類別中覆寫時,嘗試使用 CBC 模式搭配指定的填補模式,將數據解密到指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryDecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

嘗試使用 CFB 模式搭配指定的填補模式和意見反應大小,將數據解密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryDecryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

在衍生類別中覆寫時,嘗試使用 CFB 模式搭配指定的填補模式和意見反應大小,將數據解密到指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryDecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

嘗試使用 ECB 模式搭配指定的填補模式,將數據解密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryDecryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

在衍生類別中覆寫時,嘗試使用具有指定填補模式的 ECB 模式,將數據解密到指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

嘗試使用 CBC 模式搭配指定的填補模式,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryEncryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

在衍生類別中覆寫時,嘗試使用 CBC 模式搭配指定的填補模式,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryEncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

嘗試使用 CFB 模式搭配指定的填補模式和意見反應大小,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryEncryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

在衍生類別中覆寫時,嘗試使用 CFB 模式搭配指定的填補模式和意見反應大小,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryEncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

嘗試使用 ECB 模式搭配指定的填補模式,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
TryEncryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

在衍生類別中覆寫時,嘗試使用具有指定填補模式的 ECB 模式,將數據加密至指定的緩衝區。

(繼承來源 SymmetricAlgorithm)
ValidKeySize(Int32)

判斷指定的金鑰大小對目前的演算法是否有效。

(繼承來源 SymmetricAlgorithm)

明確介面實作

IDisposable.Dispose()

此 API 支援此產品基礎結構,但無法直接用於程式碼之中。

釋放 SymmetricAlgorithm 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 SymmetricAlgorithm)

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1