using System.IO; using System.Security.Cryptography; using System.Text; namespace BrilliantSightClient.Model.Helper; public class AESHelper { private static readonly int KeySize = 256; // AES-256 private static readonly int BlockSize = 128; // AES 块大小 /// /// 加密字符串 /// /// 明文 /// 密钥 /// 初始化向量 /// 加密后的 Base64 字符串 public static string Encrypt(string plainText, string key = Common.AesKey, string iv = Common.AesIV) { using (var aes = CreateAes(key, iv)) { var encryptor = aes.CreateEncryptor(); var plainBytes = Encoding.UTF8.GetBytes(plainText); var cipherBytes = PerformCryptography(plainBytes, encryptor); return Convert.ToBase64String(cipherBytes); } } /// /// 解密字符串 /// /// 密文(Base64 格式) /// 密钥 /// 初始化向量 /// 解密后的明文 public static string Decrypt(string cipherText, string key = Common.AesKey, string iv = Common.AesIV) { using (var aes = CreateAes(key, iv)) { var decryptor = aes.CreateDecryptor(); var cipherBytes = Convert.FromBase64String(cipherText); var plainBytes = PerformCryptography(cipherBytes, decryptor); return Encoding.UTF8.GetString(plainBytes); } } /// /// 加密字节数组 /// /// 明文字节数组 /// 密钥 /// 初始化向量 /// 加密后的字节数组 public static byte[] Encrypt(byte[] plainBytes, string key = Common.AesKey, string iv = Common.AesIV) { using (var aes = CreateAes(key, iv)) { var encryptor = aes.CreateEncryptor(); return PerformCryptography(plainBytes, encryptor); } } /// /// 解密字节数组 /// /// 密文字节数组 /// 密钥 /// 初始化向量 /// 解密后的字节数组 public static byte[] Decrypt(byte[] cipherBytes, string key = Common.AesKey, string iv = Common.AesIV) { using (var aes = CreateAes(key, iv)) { var decryptor = aes.CreateDecryptor(); return PerformCryptography(cipherBytes, decryptor); } } /// /// 创建 AES 实例 /// /// 密钥 /// 初始化向量 /// AES 实例 private static Aes CreateAes(string key = Common.AesKey, string iv = Common.AesIV) { var aes = Aes.Create(); aes.KeySize = KeySize; aes.BlockSize = BlockSize; aes.Padding = PaddingMode.PKCS7; aes.Mode = CipherMode.CBC; // 使用 CBC 模式 aes.Key = Encoding.UTF8.GetBytes(key.PadRight(KeySize / 8, '0')); // 密钥长度填充 aes.IV = Encoding.UTF8.GetBytes(iv.PadRight(BlockSize / 8, '0')); // IV 长度填充 return aes; } /// /// 执行加密或解密 /// /// 输入数据 /// 加密或解密转换器 /// 处理后的数据 private static byte[] PerformCryptography(byte[] data, ICryptoTransform cryptoTransform) { using (var memoryStream = new MemoryStream()) { using (var cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write)) { cryptoStream.Write(data, 0, data.Length); cryptoStream.FlushFinalBlock(); return memoryStream.ToArray(); } } } /// /// 加密字符串并返回二进制数组(指定密钥和IV) /// /// 明文字符串 /// 密钥 /// 初始化向量 /// 加密后的二进制数组 public static byte[] EncryptToBinary(string plainText, string key = Common.AesKey, string iv = Common.AesIV) { using (var aes = CreateAes(key, iv)) { var encryptor = aes.CreateEncryptor(); var plainBytes = Encoding.UTF8.GetBytes(plainText); // 复用现有编码处理 return PerformCryptography(plainBytes, encryptor); } } /// /// 解密二进制数组并返回字符串(指定密钥和IV) /// /// 加密的二进制数组 /// 密钥 /// 初始化向量 /// 解密后的明文字符串 public static string DecryptFromBinary(byte[] cipherBytes, string key = Common.AesKey, string iv = Common.AesIV) { using (var aes = CreateAes(key, iv)) { var decryptor = aes.CreateDecryptor(); var plainBytes = PerformCryptography(cipherBytes, decryptor); return Encoding.UTF8.GetString(plainBytes); // 复用现有编码处理 } } // public static string DecryptFile(string inputFile, string password) // { // var aes = Aes.Create(); // var pdb = new Rfc2898DeriveBytes(password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); // aes.Key = pdb.GetBytes(32); // aes.IV = pdb.GetBytes(16); // StringBuilder sb = new StringBuilder(); // using (var fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) // { // using (var cs = new CryptoStream(fs, aes.CreateDecryptor(), CryptoStreamMode.Read)) // { // StreamReader sr = new StreamReader(cs); // while (!sr.EndOfStream) // { // sb.Append(sr.ReadLine()); // } // } // } // return sb.ToString(); // } }