下面就为大家详细讲解“C#加解密之AES算法的实现”的完整攻略。
什么是AES算法
AES(Advanced Encryption Standard),高级加密标准,是一种对称加密算法,是由美国国家标准与技术研究院(NIST)于2001年10月2日发布的一种加密标准,已被广泛应用于各种计算机系统的安全保护之中。
AES算法实现
在C#中,可以通过以下步骤实现AES算法的加密和解密:
- 导入命名空间
using System.Security.Cryptography;
- 创建一个 AES 算法实例
Aes aes = Aes.Create();
- 设置AES加密的密钥和IV值
aes.Key
和aes.IV
- 创建一个加密流
ICryptoTransform encryptor = aes.CreateEncryptor();
- 创建一个解密流
ICryptoTransform decryptor = aes.CreateDecryptor();
- 通过加密和解密流加密和解密数据
以下是一个 AES 加密和解密的示例代码:
using System;
using System.Security.Cryptography;
namespace AESexample
{
class Program
{
static void Main(string[] args)
{
// 待加密的数据
string plainText = "Hello, world!";
// 创建一个 AES 算法实例
Aes aes = Aes.Create();
// 设置加密的密钥和向量
aes.Key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");
aes.IV = Encoding.UTF8.GetBytes("1234567890123456");
// 创建一个加密流和一个解密流
ICryptoTransform encryptor = aes.CreateEncryptor();
ICryptoTransform decryptor = aes.CreateDecryptor();
// 加密数据
byte[] encrypted = EncryptStringToBytes_Aes(plainText, encryptor);
// 解密数据
string decrypted = DecryptStringFromBytes_Aes(encrypted, decryptor);
// 输出结果
Console.WriteLine("Plain text: " + plainText);
Console.WriteLine("Encrypted text: " + Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted text: " + decrypted);
}
static byte[] EncryptStringToBytes_Aes(string plainText, ICryptoTransform encryptor)
{
byte[] encrypted;
// 创建一个 memory stream 对象
using (MemoryStream msEncrypt = new MemoryStream())
{
// 创建一个 crypto stream 对象
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
// 创建一个 writer 对象
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
// 将数据写入流
swEncrypt.Write(plainText);
}
// 获取加密后的数据
encrypted = msEncrypt.ToArray();
}
}
return encrypted;
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, ICryptoTransform decryptor)
{
string decrypted;
// 创建一个 memory stream 对象
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
// 创建一个 crypto stream对象
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
// 创建一个 reader 对象
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// 从流中读取加密数据
decrypted = srDecrypt.ReadToEnd();
}
}
}
return decrypted;
}
}
}
示例说明
下面我们通过两个示例来说明如何使用 AES 算法进行加密和解密。
示例1:AES加密和解密字符串
using System;
using System.Security.Cryptography;
namespace AESexample
{
class Program
{
static void Main(string[] args)
{
// 待加密的数据
string plainText = "Hello, world!";
// 创建一个 AES 算法实例
Aes aes = Aes.Create();
// 设置加密的密钥和向量
aes.Key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");
aes.IV = Encoding.UTF8.GetBytes("1234567890123456");
// 创建一个加密流和一个解密流
ICryptoTransform encryptor = aes.CreateEncryptor();
ICryptoTransform decryptor = aes.CreateDecryptor();
// 加密数据
byte[] encrypted = EncryptStringToBytes_Aes(plainText, encryptor);
// 解密数据
string decrypted = DecryptStringFromBytes_Aes(encrypted, decryptor);
// 输出结果
Console.WriteLine("Plain text: " + plainText);
Console.WriteLine("Encrypted text: " + Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted text: " + decrypted);
}
static byte[] EncryptStringToBytes_Aes(string plainText, ICryptoTransform encryptor)
{
byte[] encrypted;
// 创建一个 memory stream 对象
using (MemoryStream msEncrypt = new MemoryStream())
{
// 创建一个 crypto stream 对象
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
// 创建一个 writer 对象
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
// 将数据写入流
swEncrypt.Write(plainText);
}
// 获取加密后的数据
encrypted = msEncrypt.ToArray();
}
}
return encrypted;
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, ICryptoTransform decryptor)
{
string decrypted;
// 创建一个 memory stream 对象
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
// 创建一个 crypto stream对象
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
// 创建一个 reader 对象
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// 从流中读取加密数据
decrypted = srDecrypt.ReadToEnd();
}
}
}
return decrypted;
}
}
}
运行结果:
Plain text: Hello, world!
Encrypted text: RB1hmXAsWFS2hx7i/CU7jw==
Decrypted text: Hello, world!
示例2:从文件中读取数据进行AES加密和解密
using System;
using System.IO;
using System.Security.Cryptography;
namespace AESexample
{
class Program
{
static void Main(string[] args)
{
// 读取文件中的数据
string plainText = File.ReadAllText(@"./text.txt");
// 创建一个 AES 算法实例
Aes aes = Aes.Create();
// 设置加密的密钥和向量
aes.Key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");
aes.IV = Encoding.UTF8.GetBytes("1234567890123456");
// 创建一个加密流和一个解密流
ICryptoTransform encryptor = aes.CreateEncryptor();
ICryptoTransform decryptor = aes.CreateDecryptor();
// 加密数据
byte[] encrypted = EncryptStringToBytes_Aes(plainText, encryptor);
// 解密数据
string decrypted = DecryptStringFromBytes_Aes(encrypted, decryptor);
// 输出结果
Console.WriteLine("Plain text: " + plainText);
Console.WriteLine("Encrypted text: " + Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted text: " + decrypted);
}
static byte[] EncryptStringToBytes_Aes(string plainText, ICryptoTransform encryptor)
{
byte[] encrypted;
// 创建一个 memory stream 对象
using (MemoryStream msEncrypt = new MemoryStream())
{
// 创建一个 crypto stream 对象
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
// 创建一个 writer 对象
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
// 将数据写入流
swEncrypt.Write(plainText);
}
// 获取加密后的数据
encrypted = msEncrypt.ToArray();
}
}
return encrypted;
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, ICryptoTransform decryptor)
{
string decrypted;
// 创建一个 memory stream 对象
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
// 创建一个 crypto stream对象
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
// 创建一个 reader 对象
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// 从流中读取加密数据
decrypted = srDecrypt.ReadToEnd();
}
}
}
return decrypted;
}
}
}
运行结果:
Plain text: This is a plain text file.
Encrypted text: CBmURVStBsom9Y32wLnzLKMoeB13ukTgEpz5xcDuJ3kBOMzS7Bn2qNbS5bL/L49k
ZwceGps3FJQdFUIMDBLAyFDcsgQ8DX9Kxy9iaQgDfT2pptNNwKZY00Yj2kgj7Fyq
60XP7j/AxLgpwwXSZL2uMQ==
Decrypted text: This is a plain text file.
至此,我们完成了使用 C# 实现 AES 算法的加密和解密。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#加解密之AES算法的实现 - Python技术站