/// <summary>
 /// Returns an instance of a CustomIdentity class, 
 /// given an encrypted authentication string obtained from an HTTP cookie.
 /// </summary>
 /// <param name="encryptedInput">Encrypted string conataining User Identity</param>
 /// <returns>CustomIdentity object</returns>
 public static CustomIdentity Decrypt(string encryptedInput)
 {
     CustomIdentity identity = null;
     try
     {
         string decryptedString = CustomEncryption.Decrypt(encryptedInput);
         //string[] userProperties = decryptedString.Split(new char[] {'|'});
         ArrayList userProperties = new ArrayList();
         Split("|$|", decryptedString, userProperties);
         if(userProperties != null && userProperties.Count > 0)
         {
             identity = new CustomIdentity();
             Type t_identity = identity.GetType();
             PropertyInfo[] propertyInfo = t_identity.GetProperties();
             for( int i = 0; i < propertyInfo.Length; i++)
             {
                 PropertyInfo property = propertyInfo[i];
                 if(property.CanWrite)
                 {
                     string propertyValue = userProperties[i].ToString();
                     object objValue = Convert.ChangeType(propertyValue, property.PropertyType);
                     property.SetValue(identity, objValue, null);
                 }
             }
         }
     }
     catch(Exception e)
     {
         string str = e.Message;
         throw ;
     }
     return identity;
 }
        /// <summary>
        /// Produces a string containing an encrypted string for an authenticated User Identity
        /// suitable for use in an HTTP cookie given a CustomIdentity
        /// </summary>
        /// <param name="identity">CustomIdentity class for the authenticated user</param>
        /// <returns>Encrypted string</returns>
        public static string Encrypt(CustomIdentity identity)
        {
            string encryptedString = String.Empty;
            try
            {
                StringBuilder en_str = new StringBuilder();
                Type t_Identity = identity.GetType();
                PropertyInfo[] propertyInfo = t_Identity.GetProperties();
                foreach(PropertyInfo property in propertyInfo)
                {
                    en_str.Append(property.GetValue(identity, null));
                    en_str.Append("|$|");
                }

                encryptedString = CustomEncryption.Encrypt(en_str.ToString());
            }
            catch(Exception e)
            {
                string str = e.Message;
                throw ;
            }
            return encryptedString;
        }