使用C#实现AES加密算法
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class AESHelper
{
private static byte[] GenerateKey(string password, byte[] salt, int keySize)
{
using (Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(password, salt, 1000))
{
return deriveBytes.GetBytes(keySize / 8);
}
}
public static string Encrypt(string plainText, string password, string salt)
{
byte[] iv = new byte[16];
byte[] saltBytes = Encoding.UTF8.GetBytes(salt);
byte[] key = GenerateKey(password, saltBytes, 256);
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
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);
}
byte[] encrypted = msEncrypt.ToArray();
byte[] combined = new byte[iv.Length + encrypted.Length];
Buffer.BlockCopy(iv, 0, combined, 0, iv.Length);
Buffer.BlockCopy(encrypted, 0, combined, iv.Length, encrypted.Length);
return Convert.ToBase64String(combined);
}
}
}
}
public static string Decrypt(string cipherText, string password, string salt)
{
byte[] combined = Convert.FromBase64String(cipherText);
byte[] iv = new byte[16];
byte[] encrypted = new byte[combined.Length - iv.Length];
Buffer.BlockCopy(combined, 0, iv, 0, iv.Length);
Buffer.BlockCopy(combined, iv.Length, encrypted, 0, encrypted.Length);
byte[] saltBytes = Encoding.UTF8.GetBytes(salt);
byte[] key = GenerateKey(password, saltBytes, 256);
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(encrypted))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}
}
AES算法特点
- 安全性高:AES是一种对称密钥加密算法,经过广泛的分析和实践验证,能有效抵御各种已知的密码分析攻击,如差分攻击、线性攻击等。
- 效率高:在现代处理器上,AES算法的执行速度较快,可以在硬件和软件上高效实现,适用于大量数据的加密和解密操作。
- 灵活性:支持多种密钥长度(128位、192位、256位),用户可以根据安全需求选择合适的密钥长度。
- 标准化:是美国联邦政府采用的标准对称加密算法,被广泛应用于各种行业和国际标准中。
AES算法应用场景
- 数据传输加密:在网络通信中,如HTTPS协议,AES用于对传输的数据进行加密,防止数据在传输过程中被窃取或篡改,保护用户隐私和数据安全。
- 数据存储加密:对存储在硬盘、云端等介质上的数据进行加密,即使存储设备丢失或被盗,数据也难以被解密获取,如全盘加密技术常使用AES算法。
- 移动设备加密:许多移动操作系统采用AES算法对设备中的敏感数据进行加密,保障移动设备用户的数据安全。
- 企业数据保护:企业内部对敏感数据,如财务信息、商业机密等进行加密存储和传输,防止数据泄露。