public async Task <ActionResult> Compression([FromForm] IFormFile file, string name) { try { #region "Compression" string path = _env.ContentRootPath; byte[] result = null; byte[] copy = null; using (var memory = new MemoryStream()) { await file.CopyToAsync(memory); copy = memory.ToArray(); using (FileStream fStream = System.IO.File.Create(path + "/Copy/" + file.FileName)) { fStream.Write(memory.ToArray()); } result = lzw.Compression(path + "/Copy/" + file.FileName, file.FileName); } Archive response = new Archive { Content = result, ContentType = "compressedFile / huff", FileName = name }; #endregion #region "Json" LZW_Compressions jsonValues = new LZW_Compressions { OriginalName = file.FileName, CompressedFilePath = _env.ContentRootPath + "\\Compressions", CompressionRatio = (double)result.Length / (double)copy.Length, CompressionFactor = (double)copy.Length / (double)result.Length, ReductionPorcentage = 1 - ((double)result.Length / (double)copy.Length) }; JsonFile addToJson = new JsonFile(); addToJson.WriteInJson(jsonValues, _env.ContentRootPath); #endregion #region "Path" string compressionPath = _env.ContentRootPath + "/Compressions/" + name + ".huff"; using (FileStream fs = System.IO.File.Create(compressionPath)) { fs.Write(result); } #endregion return(File(response.Content, response.ContentType, response.FileName + ".huff")); } catch (System.Exception) { return(StatusCode(500)); } }
public async Task <ActionResult> Archive(IFormFile file, IFormCollection form) { User userAux = JsonSerializer.Deserialize <User>(HttpContext.Session.GetString("thisUser")); Message message = new Message(); message.emisor = userAux.UserName; message.receptor = form["receptor"]; message.message = "attached file"; message._id = Guid.NewGuid().ToString(); message.date = DateTime.Now; message.type = "archive"; using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:62573/api/"); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); var postTask = client.PostAsJsonAsync <Message>("addMessage", message); postTask.Wait(); var result = postTask.Result; if (result.IsSuccessStatusCode) { #region "LZW Compression" LZW _lzw = new LZW(); byte[] resultArchive = null; byte[] originalByte = null; using (var memory = new MemoryStream()) { await file.CopyToAsync(memory); originalByte = memory.ToArray(); //nuevo using (FileStream fstream = System.IO.File.Create(_env.ContentRootPath + "/Copy/" + file.FileName)) { fstream.Write(memory.ToArray()); fstream.Close(); } resultArchive = _lzw.Compression(_env.ContentRootPath + "/Copy/" + file.FileName, file.FileName); } System.IO.File.Delete(_env.ContentRootPath + "/Copy/" + file.FileName); #endregion Archive archive = new Archive { _id = message._id, message = resultArchive, name = file.FileName }; var postTaskAux = client.PostAsJsonAsync <Archive>("addArchive", archive); postTaskAux.Wait(); //HERE var postTask2 = client.GetAsync("allMessages"); postTask2.Wait(); var result2 = postTask2.Result; if (result2.IsSuccessStatusCode) { string resultAux2 = await result2.Content.ReadAsAsync <string>(); Message[] allMessages = JsonSerializer.Deserialize <Message[]>(resultAux2); List <Message> allMessagesAux = new List <Message>(); for (int i = 0; i < allMessages.Length; i++) { if (((allMessages[i].emisor == message.emisor) && (allMessages[i].receptor == message.receptor)) || ((allMessages[i].receptor == message.emisor) && (allMessages[i].emisor == message.receptor))) { if (allMessages[i].type == "message") { #region "Descifrado SDES" var postAllUsers2 = client.GetAsync("allUsers"); postAllUsers2.Wait(); var fufufu = postAllUsers2.Result; string asdasdasa = await fufufu.Content.ReadAsAsync <string>(); User[] allUsersXDD = JsonSerializer.Deserialize <User[]>(asdasdasa); User newUser11 = new User(); User newUser22 = new User(); for (int j = 0; j < allUsersXDD.Length; j++) { if (allUsersXDD[j].UserName == userAux.UserName) { newUser11 = allUsersXDD[j]; } if (allUsersXDD[j].UserName == form["receptor"]) { newUser22 = allUsersXDD[j]; } } Diffie_Hellman _diffie1 = new Diffie_Hellman(); BigInteger publicNumber11 = _diffie1.PublicNumberGenerator(33, 101, newUser11.Private_Number); BigInteger publicNumber22 = _diffie1.PublicNumberGenerator(33, 101, newUser22.Private_Number); BigInteger kuser11 = _diffie1.KGenerator(publicNumber22, newUser11.Private_Number, 101); BigInteger kuser22 = _diffie1.KGenerator(publicNumber11, newUser22.Private_Number, 101); string response2 = ""; if (kuser11 == kuser22) { SDES _sdes = new SDES(); string keyMaster = _sdes.ToNBase(kuser11, 2); _sdes.KeysGenerator(keyMaster); //Convertir mensaje a arreglo de bytes: char[] arrayChar = allMessages[i].message.ToCharArray(); byte[] bytes_Encrypted = new byte[arrayChar.Length]; for (int j = 0; j < arrayChar.Length; j++) { bytes_Encrypted[j] = (byte)arrayChar[j]; } byte[] resultFinalBytes = _sdes.SDES_Encryption(bytes_Encrypted, "descifrado"); //Convertir arreglo de bytes a string y agregarlo a Mongo: char[] charResult = new char[resultFinalBytes.Length]; for (int j = 0; j < resultFinalBytes.Length; j++) { charResult[j] = (char)resultFinalBytes[j]; } for (int j = 0; j < charResult.Length; j++) { response2 += charResult[j].ToString(); } } allMessages[i].message = response2; #endregion } allMessagesAux.Add(allMessages[i]); } } #region "Motrar nuevamente usuario en el combobox" var postTask3 = client.GetAsync("allUsers"); postTask3.Wait(); var result3 = postTask3.Result; if (result3.IsSuccessStatusCode) { string resultAux3 = await result3.Content.ReadAsAsync <string>(); User[] allUsers = JsonSerializer.Deserialize <User[]>(resultAux3); List <string> nameAllUsers = new List <string>(); for (int i = 0; i < allUsers.Length; i++) { Message mmm = JsonSerializer.Deserialize <Message>(HttpContext.Session.GetString("thisR")); if (allUsers[i].UserName == mmm.receptor) { nameAllUsers.Insert(0, mmm.receptor); } else if (allUsers[i].UserName != userAux.UserName) { nameAllUsers.Add(allUsers[i].UserName); } } string[] arrayAux = nameAllUsers.ToArray(); HttpContext.Session.SetString("nameAllUsers", JsonSerializer.Serialize(arrayAux)); } #endregion Message[] arrayAux2 = allMessagesAux.ToArray(); HttpContext.Session.SetString("nameAllMessages", JsonSerializer.Serialize(arrayAux2)); return(RedirectToAction("LoginChat")); } } else { return(StatusCode(500)); } } return(StatusCode(500)); }