AesCryptoServiceProvider 类
命名空间:System.Security.Cryptography
程序集:System.Core.dll, netstandard.dll, System.Security.Cryptography.Csp.dll
使用高级加密标准 (AES) 算法的加密应用程序编程接口 (CAPI) 实现来执行对称加密和解密。
public sealed class AesCryptoServiceProvider : System.Security.Cryptography.Aes
继承Object → SymmetricAlgorithm → Aes → AesCryptoServiceProvider
示例
下面的示例演示如何使用 AesCryptoServiceProvider 类对示例数据进行加密和解密。
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!";
// 创建 AesCryptoServiceProvider 实例
// 初始化一个新的密钥
// vector (IV).
using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider())
{
// 将字符串加密为字节数组
byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV);
// 将字节解密为字符串
string roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.IV);
//显示原始数据和解密数据
Console.WriteLine("Original: {0}", original);
Console.WriteLine("Round Trip: {0}", roundtrip);
}
}
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
// 检查参数
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;
// 创建aescyptoserviceprovider对象
// 使用指定的密钥和IV
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// 创建加密程序以执行流转换
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// 创建用于加密的
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//将所有数据写入流
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
// 从内存流返回加密字节
return encrypted;
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
{
// 检查参数
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");
// 声明用于保存的字符串
// 解密的文本
string plaintext = null;
// 创建aescyptoserviceprovider对象
// 使用指定的密钥和IV
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// 创建解密程序以执行流转换
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
// 创建用于解密的流
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// 从解密流中读取解密字节 并把它们串起来
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
}
}
构造函数
AesCryptoServiceProvider():初始化 AesCryptoServiceProvider 类的新实例。
字段
BlockSizeValue:表示加密操作的块大小(以位为单位)。(继承自 SymmetricAlgorithm)
FeedbackSizeValue:表示加密操作的反馈大小(以位为单位)。(继承自 SymmetricAlgorithm)
IVValue:表示对称算法的初始化向量 (IV)。(继承自 SymmetricAlgorithm)
KeySizeValue:表示对称算法使用的密钥的大小(以位为单位)。(继承自 SymmetricAlgorithm)
KeyValue:表示对称算法的密钥。(继承自 SymmetricAlgorithm)
LegalBlockSizesValue:指定对称算法支持的块大小(以位为单位)。(继承自 SymmetricAlgorithm)
LegalKeySizesValue:指定对称算法支持的密钥大小(以位为单位)。(继承自 SymmetricAlgorithm)
ModeValue:表示对称算法中使用的密码模式。(继承自 SymmetricAlgorithm)
PaddingValue:表示对称算法中使用的填充模式。(继承自 SymmetricAlgorithm)
属性
Key:获取或设置用于加密和解密的对称密钥。
KeySize:获取或设置密钥的大小(以位为单位)。
方法
Clear():释放 SymmetricAlgorithm 类使用的所有资源。(继承自 SymmetricAlgorithm)
CreateDecryptor():使用当前的密钥和初始化向量 (IV) 创建对称 AES 解密器对象。
CreateDecryptor(Byte[], Byte[]):使用指定的密钥和初始化向量 (IV) 创建对称 AES 解密器对象。
CreateEncryptor():使用当前的密钥和初始化向量 (IV) 创建对称 AES 加密器对象。
CreateEncryptor(Byte[], Byte[]):使用指定的密钥和初始化向量 (IV) 创建对称加密器对象。
Dispose():释放 SymmetricAlgorithm 类的当前实例所使用的所有资源。(继承自 SymmetricAlgorithm)
Dispose(Boolean):释放由 SymmetricAlgorithm 占用的非托管资源,还可以另外再释放托管资源。(继承自 SymmetricAlgorithm)
Equals(Object):确定指定的对象是否等于当前对象。(继承自 Object)
GenerateIV():生成用于该算法的随机初始化向量 (IV)。
GenerateKey():生成用于该算法的随机密钥。
GetHashCode():用作默认哈希函数。(继承自 Object)
GetType():获取当前实例的 Type。(继承自 Object)
MemberwiseClone():创建当前 Object 的浅表副本。(继承自 Object)
ToString():返回一个表示当前对象的 string。(继承自 Object)
ValidKeySize(Int32):确定指定的密钥大小对当前算法是否有效。(继承自 SymmetricAlgorithm)
相关阅读 >>
更多相关阅读请进入《AesCryptoServiceProvider》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。