Exemplo n.º 1
0
        /// <summary>
        /// Returns <paramref name="data"/> decrypted based on encryption original <paramref name="stringFormat"/>, <paramref name="key"/> and <paramref name="encryptionProvider"/>.
        /// </summary>
        public static string Decrypt(string data, string key, EncryptionProvider encryptionProvider, StringFormat stringFormat)
        {
            Argument.IsNotNull(data, "data");
            Argument.IsNotNull(key, "key");

            var encryptionAlgorithm = GetEncryptionAlgorithm(encryptionProvider);

            var dataBytes = Util.StringToBytes(data, stringFormat, defaultEncoding).ToArray();

            encryptionAlgorithm.Key = CreateCryptoKey(encryptionAlgorithm, key);
            encryptionAlgorithm.IV = CreateCryptoIv(encryptionAlgorithm, DefaultInitializationVector);

            var result = new byte[dataBytes.Length];

            using (var ms = new MemoryStream(dataBytes, 0, dataBytes.Length))
            {
                using (var cs = new CryptoStream(ms, encryptionAlgorithm.CreateDecryptor(), CryptoStreamMode.Read))
                {
                    cs.Read(result, 0, dataBytes.Length);
                }
            }

            // Clean trailing zeros.
            result = Util.CleanBytes(result).ToArray();

            return Util.BytesToTextString(result, defaultEncoding);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns <paramref name="data"/> encrypted in target <paramref name="stringFormat"/> based on <paramref name="key"/> and <paramref name="encryptionProvider"/>.
        /// </summary>
        public static string Encrypt(string data, string key, EncryptionProvider encryptionProvider, StringFormat stringFormat)
        {
            Argument.IsNotNull(data, "data");
            Argument.IsNotNull(key, "key");

            var encryptionAlgorithm = GetEncryptionAlgorithm(encryptionProvider);

            var dataBytes = defaultEncoding.GetBytes(data);

            encryptionAlgorithm.Key = CreateCryptoKey(encryptionAlgorithm, key);
            encryptionAlgorithm.IV = CreateCryptoIv(encryptionAlgorithm, DefaultInitializationVector);

            string result;

            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, encryptionAlgorithm.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(dataBytes, 0, dataBytes.Length);
                }

                result = Util.BytesToString(ms.ToArray(), stringFormat);
            }

            return result;
        }
        internal static string GetAuthorizationToken(string username, string password)
        {
            //getting public key
            try {
                    System.Net.ServicePointManager.Expect100Continue = false;
                    HttpWebRequest request = (HttpWebRequest) WebRequest.Create (auth_key_uri);
                    HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
                    XPathNavigator navigator = (new XPathDocument (new StreamReader (
                                                    response.GetResponseStream ()))).CreateNavigator ();
                    string public_key = (string) navigator.Evaluate ("string(/response/key)");
                    string request_id = (string) navigator.Evaluate ("string(/response/request_id)");
                    response.Close ();

                    //encoding
                    EncryptionProvider encryption_provider = new EncryptionProvider ();
                    encryption_provider.ImportPublicKey (public_key);
                    string credentials = String.Format (@"<credentials login=""{0}"" password=""{1}""/>", username, password);
                    string encoded_credentials = Convert.ToBase64String (encryption_provider.Encrypt
                                    (new UTF8Encoding ().GetBytes (credentials)));

                    //sending encoded data and receiving authorization token
                    request = (HttpWebRequest) WebRequest.Create (auth_token_uri);
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    byte[] parameters = Encoding.UTF8.GetBytes ("request_id=" +
                                    request_id + "&credentials=" + HttpUtility.UrlEncode(encoded_credentials));

                    Stream request_stream = request.GetRequestStream ();
                    request_stream.Write (parameters, 0, parameters.Length);
                    request_stream.Close ();

                    response = (HttpWebResponse) request.GetResponse ();
                    navigator = (new XPathDocument (new StreamReader (
                                                    response.GetResponseStream ()))).CreateNavigator ();
                    string token = (string) navigator.Evaluate ("string(/response/token)");
                    response.Close ();

                    return token;
            } catch (WebException exception) {
                    HttpWebResponse response = (HttpWebResponse) exception.Response;

                    if (response != null) {
                            string response_text;
                            HttpStatusCode status_code = response.StatusCode;

                            using (StreamReader reader = new StreamReader (response.GetResponseStream ())) {
                                    response_text = reader.ReadToEnd ();
                            }

                            //Process 403 and 400 errors
                            if (status_code == HttpStatusCode.Forbidden || status_code == HttpStatusCode.BadRequest) {
                                    XmlDocument document = new XmlDocument ();
                                    document.LoadXml (response_text);
                                    XPathNavigator navigator = document.CreateNavigator ();
                                    string error = (string) navigator.Evaluate ("string(//error)");

                                    throw new AuthenticationFailedException (error);
                            }
                    }
                    throw new ConnectionFailedException (exception.Message);
            }
        }
Exemplo n.º 4
0
        private static SymmetricAlgorithm GetEncryptionAlgorithm(EncryptionProvider encryptionProvider)
        {
            switch (encryptionProvider)
            {
                case EncryptionProvider.Des:
                    return new DESCryptoServiceProvider();
                case EncryptionProvider.Rc2:
                    return new RC2CryptoServiceProvider();
                case EncryptionProvider.Rijndael:
                    return new RijndaelManaged();
                case EncryptionProvider.TripleDes:
                    return new TripleDESCryptoServiceProvider();
            }

            throw new InvalidEnumArgumentException(string.Format("Not supported encryption provider: {0}", encryptionProvider));
        }