C#中实现AES算法加密解读
什么是AES算法
AES算法是一种被广泛应用的加密算法,也是现代标准对称加密算法之一。它能够对数据进行高效、安全的加密和解密操作。AES算法使用对称密钥,加密和解密过程使用相同的密钥,是一种快速、高效、难以破解的加密方式。
AES算法的实现
在C#中使用AES算法进行加密,需要借助.NET Framework提供的CryptoStream类和AesCryptoServiceProvider类。
AES算法加密
首先,我们需要创建一个AesCryptoServiceProvider对象,来生成随机密钥和IV(初始化向量)。
using System.Security.Cryptography;
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
接下来,我们需要指定加密模式、填充模式、密钥和IV。下面的代码示例中,我们选择了AES/CBC/PKCS7Padding加密模式、AES算法的128位密钥和16位IV。
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.Key = new byte[128 / 8];
aes.IV = new byte[16];
随机生成一个密钥,可以使用GenerateKey
方法:
aes.GenerateKey();
随机生成一个IV,可以使用GenerateIV
方法:
aes.GenerateIV();
接下来,需要把明文加密成密文。可以使用CryptoStream
进行流式加密,以下是一个完整的示例代码:
using System.Security.Cryptography;
public static byte[] Encrypt(byte[] plainBytes, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.Key = key;
aes.IV = iv;
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(plainBytes, 0, plainBytes.Length);
cs.FlushFinalBlock();
return ms.ToArray();
}
}
}
AES算法解密
解密与加密类似,需要指定解密模式、填充模式、密钥和IV,然后把密文解密成明文。可以使用CryptoStream
进行流式解密,以下是一个完整的示例代码:
using System.Security.Cryptography;
public static byte[] Decrypt(byte[] cipherBytes, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.Key = key;
aes.IV = iv;
using (MemoryStream ms = new MemoryStream(cipherBytes))
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
using (MemoryStream ms2 = new MemoryStream())
{
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = cs.Read(buffer, 0, buffer.Length)) > 0)
{
ms2.Write(buffer, 0, readBytes);
}
return ms2.ToArray();
}
}
}
示例说明
下面提供2条示例代码:
示例1:生成随机密钥和IV,对字符串进行加密和解密
using System;
class Program
{
static void Main()
{
string plainText = "Hello world!";
byte[] plainBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
// 生成随机密钥和IV
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.GenerateKey();
aes.GenerateIV();
byte[] key = aes.Key;
byte[] iv = aes.IV;
// 加密
byte[] cipherBytes = AesHelper.Encrypt(plainBytes, key, iv);
// 解密
byte[] decryptBytes = AesHelper.Decrypt(cipherBytes, key, iv);
string decryptText = System.Text.Encoding.UTF8.GetString(decryptBytes);
Console.WriteLine(decryptText);
}
}
}
示例2:使用固定密钥和IV,对字符串进行加密和解密
using System;
class Program
{
static void Main()
{
string plainText = "Hello world!";
byte[] plainBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
byte[] key = new byte[16] { 0x6B, 0xF9, 0x1C, 0x4D, 0x3C, 0x5A, 0xA4, 0x3D, 0x9D, 0x47, 0x1E, 0x2D, 0x5E, 0x5A, 0x41, 0x2F };
byte[] iv = new byte[16] { 0xA5, 0xA1, 0x94, 0xAB, 0x05, 0xE8, 0xFE, 0x3D, 0x53, 0x7B, 0x7D, 0x5C, 0x9F, 0x6B, 0x9C, 0x70 };
// 加密
byte[] cipherBytes = AesHelper.Encrypt(plainBytes, key, iv);
// 解密
byte[] decryptBytes = AesHelper.Decrypt(cipherBytes, key, iv);
string decryptText = System.Text.Encoding.UTF8.GetString(decryptBytes);
Console.WriteLine(decryptText);
}
}
以上就是C#中实现AES算法加密解密的完整攻略,希望能够帮助你更好地理解和使用AES算法进行数据加密和解密。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中实现AES算法加密解读 - Python技术站