using System.Security.Cryptography;
using System.Text;
namespace LY.App.Common.Cypher
{
    public class AESCypherUtil
    {
        /// 
        ///  AES 加密
        /// 
        /// 明文
        /// 密钥对
        /// 密文
        public static string Encrypt(string str, string key, string iv)
        {
            using (var aes = Aes.Create())
            {
                aes.Key = Encoding.UTF8.GetBytes(key);
                aes.IV = Encoding.UTF8.GetBytes(iv);
                aes.Mode = CipherMode.CBC;
                aes.Padding = PaddingMode.PKCS7;
                byte[] strbuffer = Encoding.UTF8.GetBytes(str);
                using (var crytTransform = aes.CreateEncryptor(aes.Key, aes.IV))
                {
                    byte[] buffer = crytTransform.TransformFinalBlock(strbuffer, 0, strbuffer.Length);
                    return Convert.ToBase64String(buffer, 0, buffer.Length);
                }
            }
        }
        /// 
        ///  AES 解密
        /// 
        /// 密文
        /// 密钥对
        /// 明文
        public static string Decrypt(string str, string key, string iv)
        {
            using (var aes = Aes.Create())
            {
                aes.Key = Encoding.UTF8.GetBytes(key);
                aes.IV = Encoding.UTF8.GetBytes(iv);
                aes.Mode = CipherMode.CBC;
                aes.Padding = PaddingMode.PKCS7;
                byte[] strbuffer = System.Convert.FromBase64String(str);
                using (var crytTransform = aes.CreateDecryptor(aes.Key, aes.IV))
                {
                    byte[] buffer = crytTransform.TransformFinalBlock(strbuffer, 0, strbuffer.Length);
                    return Encoding.UTF8.GetString(buffer);
                }
            }
        }
    }
}