public static string Encrypt(string data, byte[] key, byte[] salt, AesCryptographyLevel bits)
        {
            var clearBytes = Encoding.Unicode.GetBytes(data);

            var pdb = new Rfc2898DeriveBytes(key, salt, 5);

            switch (bits)
            {
                case AesCryptographyLevel.Aes128:
                    return Convert.ToBase64String(Encrypt(clearBytes, pdb.GetBytes(16), pdb.GetBytes(16)));
                case AesCryptographyLevel.Aes192:
                    return Convert.ToBase64String(Encrypt(clearBytes, pdb.GetBytes(24), pdb.GetBytes(16)));
                default:
                    return Convert.ToBase64String(Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16)));
            }
        }
        public static string Decrypt(string data, byte[] key, byte[] salt, AesCryptographyLevel bits)
        {
            var cipherBytes = Convert.FromBase64String(data);

            var pdb = new Rfc2898DeriveBytes(key, salt, 5);

            switch (bits)
            {
            case AesCryptographyLevel.Aes128:
                return(Encoding.Unicode.GetString(Decrypt(cipherBytes, pdb.GetBytes(16), pdb.GetBytes(16))));

            case AesCryptographyLevel.Aes192:
                return(Encoding.Unicode.GetString(Decrypt(cipherBytes, pdb.GetBytes(24), pdb.GetBytes(16))));

            default:
                return(Encoding.Unicode.GetString(Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16))));
            }
        }