public static string decryptString(string Value, byte[] Key, byte[] IV, stringIOType inputType, Encoding outputEncoding)
        {
            try
            {
                Monitor.Enter(_lock);
                byte[] baseValue;
                switch (inputType)
                {
                case stringIOType.base64EncodedString:
                    baseValue = Convert.FromBase64String(Value);
                    break;

                case stringIOType.HexEncodedString:
                    baseValue = HexStringToByteArray(Value);
                    break;

                default:
                    baseValue = Convert.FromBase64String(Value);
                    break;
                }
                return(outputEncoding.GetString(decryptBytes(baseValue, Key, IV)));
            }
            finally
            {
                Monitor.Exit(_lock);
            }
        }
 public static string encryptString(string Value, string PassPhrase, Encoding PassPhraseEncoding, Encoding inputEncoding, stringIOType outputType)
 {
     try
     {
         Monitor.Enter(_lock);
         return(encryptString(Value, getKeyFromPassPhrase(PassPhrase, PassPhraseEncoding), getIVFromPassPhrase(PassPhrase, PassPhraseEncoding), inputEncoding, outputType));
     }
     finally
     {
         Monitor.Exit(_lock);
     }
 }
        public static string encryptString(string Value, byte[] Key, byte[] IV, Encoding inputEncoding, stringIOType outputType)
        {
            try
            {
                Monitor.Enter(_lock);
                byte[] baseValue = (byte[])Array.CreateInstance(typeof(byte), inputEncoding.GetByteCount(Value));
                baseValue = inputEncoding.GetBytes(Value);
                switch (outputType)
                {
                case stringIOType.base64EncodedString:
                    return(Convert.ToBase64String(encryptBytes(baseValue, Key, IV)));

                case stringIOType.HexEncodedString:
                    return(ByteArrayToHexString(encryptBytes(baseValue, Key, IV)));

                default:
                    return(Convert.ToBase64String(encryptBytes(baseValue, Key, IV)));
                }
            }
            finally
            {
                Monitor.Exit(_lock);
            }
        }