using System; using System.Security.Cryptography; using System.Text; namespace BF { public class AesEncrypt { const int PASSWORD_LENGTH = 32; //密钥长度16,24,32 static byte[] IV = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; //只能16字节 static AesCryptoServiceProvider aesProvider; static void Init(string key, bool fromBase64 = false) { if (null == aesProvider) { aesProvider = new AesCryptoServiceProvider { // KeySize = PASSWORD_LENGTH, IV = IV, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7, }; } if (!string.IsNullOrEmpty(key)) { if (fromBase64) key = Encoding.UTF8.GetString(Convert.FromBase64String(key)); key = GenPassWord(key); var keyBytes = Encoding.UTF8.GetBytes(key); aesProvider.Key = keyBytes; } } /// /// 纯aes加密 /// static public byte[] Encrypt(byte[] buffer, string key) { Init(key); var encrytor = aesProvider.CreateEncryptor(); byte[] finalArray = encrytor.TransformFinalBlock(buffer, 0, buffer.Length); encrytor.Dispose(); return finalArray; } /// /// 纯aes解密 /// static public byte[] Decrypt(byte[] buffer, string key) { Init(key); var decrytor = aesProvider.CreateDecryptor(); byte[] finalArray = decrytor.TransformFinalBlock(buffer, 0, buffer.Length); decrytor.Dispose(); return finalArray; } static string GenPassWord(string key) { int len = key.Length; if (len < PASSWORD_LENGTH) { key = key.PadRight(PASSWORD_LENGTH, 'D'); } else if (len > PASSWORD_LENGTH) { key = key.Substring(0, len); } return key; } static public void Clear() { if (null != aesProvider) { aesProvider.Clear(); } } } }