using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace HKCarPlateRecognize_App
{
    public class AesHelper
    {
        public static string EncodeAES(string text, string key)
        {
            byte[] keyArray = null;
            using (var sha1 = new SHA1CryptoServiceProvider())
            {
                byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(key));
                var rd = sha1.ComputeHash(hash);
                keyArray = rd.Take(16).ToArray();
            }

            RijndaelManaged rijndaelCipher = new RijndaelManaged();
            rijndaelCipher.Mode = CipherMode.ECB;
            rijndaelCipher.Padding = PaddingMode.PKCS7;
            rijndaelCipher.KeySize = 128;

            rijndaelCipher.Key = keyArray;
            ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
            byte[] plainText = Encoding.UTF8.GetBytes(text);
            byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);

            return ByteUtil.BytesToHexString(cipherBytes);
        }

        public static string DecodeAES(string ciphertext, string key)
        {
            byte[] keyArray = null;
            using (var sha1 = new SHA1CryptoServiceProvider())
            {
                byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(key));
                var rd = sha1.ComputeHash(hash);
                keyArray = rd.Take(16).ToArray();
            }

            byte[] text = ByteUtil.HexStringToBytes(ciphertext);
            RijndaelManaged rijndaelCipher = new RijndaelManaged();
            rijndaelCipher.Mode = CipherMode.ECB;
            rijndaelCipher.Padding = PaddingMode.PKCS7;
            rijndaelCipher.KeySize = 128;
            rijndaelCipher.BlockSize = 128;
            byte[] encryptedData = text;
            rijndaelCipher.Key = keyArray;
            ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
            byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);

            return Encoding.UTF8.GetString(plainText);
        }
    }
}