下面是C#代码实现对AES加密解密的完整攻略。
1. 引入所需的命名空间
在C#代码实现对AES加密解密之前,我们需要先引入所需的命名空间。对于AES加密解密,我们需要引入System.Security.Cryptography
命名空间。
using System.Security.Cryptography;
2. 生成密钥和向量
在进行AES加密解密之前,我们需要先生成密钥和向量。使用Aes.Create()
方法可以创建一个Aes
对象,然后可以调用GenerateKey()
和GenerateIV()
方法生成随机的密钥和向量。
Aes aes = Aes.Create();
aes.GenerateKey();
aes.GenerateIV();
byte[] key = aes.Key;
byte[] iv = aes.IV;
3. 对明文进行加密
对明文进行加密,我们需要先将明文转换为字节数组,然后创建Aes
对象,设置密钥和向量,并调用CreateEncryptor()
方法创建一个加密器对象,最后使用加密器对象的TransformFinalBlock()
方法进行加密。
string text = "Hello, world!";
byte[] plaintext = Encoding.UTF8.GetBytes(text);
Aes aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] ciphertext = encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length);
4. 对密文进行解密
对密文进行解密,我们需要先创建Aes
对象,设置密钥和向量,并调用CreateDecryptor()
方法创建一个解密器对象,然后使用解密器对象的TransformFinalBlock()
方法进行解密,最后将解密后的字节数组转换为字符串。
Aes aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] plaintext = decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length);
string text = Encoding.UTF8.GetString(plaintext);
示例1:加密解密字符串
下面是一个加密解密字符串的示例。
string text = "Hello, world!";
byte[] plaintext = Encoding.UTF8.GetBytes(text);
Aes aes = Aes.Create();
aes.GenerateKey();
aes.GenerateIV();
byte[] key = aes.Key;
byte[] iv = aes.IV;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] ciphertext = encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length);
ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] decrypted = decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length);
string result = Encoding.UTF8.GetString(decrypted);
Console.WriteLine("Original: {0}", text);
Console.WriteLine("Decrypted: {0}", result);
输出结果如下:
Original: Hello, world!
Decrypted: Hello, world!
示例2:加密解密文件
下面是一个加密解密文件的示例。
string plaintextFile = @"D:\plaintext.txt";
string ciphertextFile = @"D:\ciphertext.txt";
string decryptedFile = @"D:\decrypted.txt";
byte[] key;
byte[] iv;
using (Aes aes = Aes.Create())
{
aes.GenerateKey();
aes.GenerateIV();
key = aes.Key;
iv = aes.IV;
using (ICryptoTransform encryptor = aes.CreateEncryptor())
{
using (FileStream plaintextStream = new FileStream(plaintextFile, FileMode.Open))
{
using (FileStream ciphertextStream = new FileStream(ciphertextFile, FileMode.Create))
{
using (CryptoStream cryptoStream = new CryptoStream(ciphertextStream, encryptor, CryptoStreamMode.Write))
{
plaintextStream.CopyTo(cryptoStream);
}
}
}
}
using (ICryptoTransform decryptor = aes.CreateDecryptor())
{
using (FileStream ciphertextStream = new FileStream(ciphertextFile, FileMode.Open))
{
using (FileStream decryptedStream = new FileStream(decryptedFile, FileMode.Create))
{
using (CryptoStream cryptoStream = new CryptoStream(ciphertextStream, decryptor, CryptoStreamMode.Read))
{
cryptoStream.CopyTo(decryptedStream);
}
}
}
}
}
string plaintext = File.ReadAllText(plaintextFile);
string decrypted = File.ReadAllText(decryptedFile);
Console.WriteLine("Original: {0}", plaintext);
Console.WriteLine("Decrypted: {0}", decrypted);
这个示例将plaintext.txt
文件加密为ciphertext.txt
文件,然后将ciphertext.txt
文件解密为decrypted.txt
文件,并将plaintext.txt
和decrypted.txt
文件的内容输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#代码实现对AES加密解密 - Python技术站