/// <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); }
/// <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); } }
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)); }