/// <summary> /// Metoda koja dohvaća poruke koje je korisnik poslao ostalim korisnicima /// </summary> /// <param name="connection"></param> /// <returns></returns> public string DohvatiPoslanePoruke(SqlConnection connection) { string rezultat = ""; Poruka poruka; var command = new SqlCommand(); command.Connection = connection; command.CommandType = CommandType.Text; command.CommandText = "SELECT * from Poruka,EnkriptiraniPaket WHERE Posiljatelj=@Username AND IdPaketa=EnkriptiraniPaket.Id"; command.Parameters.AddWithValue("@Username", Username); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { poruka = new Poruka(); poruka.DatumSlanja = (DateTime)reader["DatumSlanja"]; poruka.Posiljatelj = reader["Posiljatelj"].ToString(); poruka.Primatelj = reader["Primatelj"].ToString(); poruka.Paket.EnkriptiraniKljuc = reader["EnkriptiraniKljuc"].ToString(); poruka.Paket.EnkriptiraniPodaci = reader["EnkriptiraniPodaci"].ToString(); poruka.Paket.Iv = (byte[])reader["Iv"]; Poruke.Add(poruka); } } rezultat = JsonPretvarac.Serijalizacija(this); return(rezultat); }
/// <summary> /// Event handler koji se aktivira prilikom klika na gumb Enkriptiraj i Pošalji. Poruci se pridružuje primatelj, pošiljatelj /// te datum slanja zajedno sa sadrzajem. Sa pomoću javnoga ključa formira se enkripcijski paket poruke te se takva poruka šalje /// prema serveru. Čeka se odgovor servera koji predstavlja Uspjeh Slanja Poruke - je li poruka poslana ili nije. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gumbPosalji_Click(object sender, EventArgs e) { string sadrzaj; string javniKljuc; klijent = new TcpKlijent(); Poruka novaPoruka = new Poruka(); novaPoruka.Posiljatelj = prijavljeniKorisnik.Username; novaPoruka.Primatelj = odabirUsername.Text; novaPoruka.DatumSlanja = DateTime.Now; sadrzaj = unosSadrzaj.Text; javniKljuc = novaLista.Korisnici.Where(i => i.Username == novaPoruka.Primatelj).Select(p => p.JavniKljuc).First(); novaPoruka.FormirajEnkripcijskiPaket(sadrzaj, javniKljuc); klijent.PosaljiServeru(novaPoruka, "PosaljiPoruku"); uspjeh = (UspjehSlanjaPoruke)klijent.PrimiOdServera(); if (uspjeh.PorukaPoslana == "DA") { prikazLog.Text += "Vrijeme: " + DateTime.Now.ToString() + " - Poruka poslana" + Environment.NewLine; } else { prikazLog.Text += "Vrijeme: " + DateTime.Now.ToString() + " - Poruka nije poslana" + Environment.NewLine; } }
/// <summary> /// Konstruktor forme koji za parametar ima objekt 'Poruka' kako bi se uopce mogao prikazati enkriptirani i /// dekriptirani tekst /// </summary> /// <param name="poruka"></param> public FormaDekriptiranaPoruka(Poruka poruka) { InitializeComponent(); prikazEnkriptiran.Text = poruka.Paket.EnkriptiraniPodaci; string privatniKljuc = DohvatiPrivatniKljuc(poruka.Primatelj); string dekriptiranaPoruka = HibridnaEnkripcija.DecryptData(poruka, privatniKljuc); prikazDekriptiran.Text = dekriptiranaPoruka; }
/// <summary> /// Metoda koja služi za dekripciju poruke s obzirom na sam sadržaj poruke. /// Za dekripciju same poruke važan je privatni ključ koji se prosljeđuje ovoj metodi te ona pomoću toga ključa /// rsa algoritmom dekriptira ključ kojim je enkriptirana poruka. /// Zatim se taj ključ i inicijalizacijski vektor pridružuje aes objektu koji zatim može dekriptirati sam sadržaj poruke. /// </summary> /// <param name="poruka"></param> /// <param name="privatniKljuc"></param> /// <returns></returns> public static string DecryptData(Poruka poruka, string privatniKljuc) { Enkripcija aes = new AesEnkripcija(); Enkripcija rsa = new RsaEnkripcija(); rsa.PridruziPrivatniKljuc(privatniKljuc); var dekriptiraniKljuc = rsa.DecryptData(poruka.Paket.EnkriptiraniKljuc); aes.PridruziKljucIV(Convert.FromBase64String(dekriptiraniKljuc), poruka.Paket.Iv); var decryptedData = aes.DecryptData(poruka.Paket.EnkriptiraniPodaci); return(decryptedData); }
/// <summary> /// Deserijalizacija json stringa u pripadajući objekt klase /// </summary> /// <param name="json"></param> /// <returns></returns> public static object Deserijalizacija(string json) { object izlaz = 0; string noviJson = IzbaciTipPoruke(json); string tipKlase = Parsiranje(noviJson, "Tip"); if (tipKlase == "Korisnik") { Korisnik osoba = JsonConvert.DeserializeObject <Korisnik>(noviJson); izlaz = osoba; } if (tipKlase == "UspjehRegistracije") { UspjehRegistracije uspjeh = JsonConvert.DeserializeObject <UspjehRegistracije>(noviJson); izlaz = uspjeh; } if (tipKlase == "ListaKorisnika") { ListaKorisnika lista = JsonConvert.DeserializeObject <ListaKorisnika>(noviJson); izlaz = lista; } if (tipKlase == "Poruka") { Poruka poruka = JsonConvert.DeserializeObject <Poruka>(noviJson); izlaz = poruka; } if (tipKlase == "UspjehSlanjaPoruke") { UspjehSlanjaPoruke uspjeh = JsonConvert.DeserializeObject <UspjehSlanjaPoruke>(noviJson); izlaz = uspjeh; } if (tipKlase == "ListaPoruka") { ListaPoruka poruke = JsonConvert.DeserializeObject <ListaPoruka>(noviJson); izlaz = poruke; } if (tipKlase == "AdminMail") { AdminMail mail = JsonConvert.DeserializeObject <AdminMail>(noviJson); izlaz = mail; } return(izlaz); }
/// <summary> /// Event Handler koji se aktivira pritiskom na gumb pregledaj za određenu poruku. Otvara se forma /// koja prikazuje poruku u enkriptiranom i dekriptiranom obliku. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridViewPrimljeno_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 0) { try { Poruka poruka = dataGridViewPrimljeno.Rows[e.RowIndex].Cells["Poruka"].Value as Poruka; FormaDekriptiranaPoruka novaForma = new FormaDekriptiranaPoruka(poruka); novaForma.StartPosition = FormStartPosition.CenterParent; novaForma.ShowDialog(); } catch { } } }
/// <summary> /// Event Handler koji se aktivira prilikom klika na određeni tab u formi. Ovisno na koji se tab klikne /// šalju se odgovarajući podaci prema serveru na temelju kojih se dohavaćaju poslane ili primljene poruke. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tabKontrola_SelectedIndexChanged(object sender, EventArgs e) { if (tabKontrola.SelectedIndex == 1) { dataGridViewPoslano.Rows.Clear(); dataGridViewPoslano.Refresh(); klijent = new TcpKlijent(); listaPoruka = new ListaPoruka(); listaPoruka.Username = prijavljeniKorisnik.Username; klijent.PosaljiServeru(listaPoruka, "DohvatiPoslanePoruke"); listaPoruka = (ListaPoruka)klijent.PrimiOdServera(); listaPoruka.Poruke = listaPoruka.Poruke.OrderByDescending(x => x.DatumSlanja).ToList(); for (int i = 0; i < listaPoruka.Poruke.Count; i++) { Poruka poruka = listaPoruka.Poruke[i]; EnkripcijskiPaket paket = listaPoruka.Poruke[i].Paket; dataGridViewPoslano.Rows.Add(poruka, poruka.Posiljatelj, poruka.Primatelj, poruka.DatumSlanja, paket.EnkriptiraniKljuc, paket.EnkriptiraniPodaci, Convert.ToBase64String(paket.Iv)); } } if (tabKontrola.SelectedIndex == 0) { dataGridViewPrimljeno.Rows.Clear(); dataGridViewPrimljeno.Refresh(); klijent = new TcpKlijent(); listaPoruka = new ListaPoruka(); listaPoruka.Username = prijavljeniKorisnik.Username; klijent.PosaljiServeru(listaPoruka, "DohvatiPrimljenePoruke"); listaPoruka = (ListaPoruka)klijent.PrimiOdServera(); listaPoruka.Poruke = listaPoruka.Poruke.OrderByDescending(x => x.DatumSlanja).ToList(); for (int i = 0; i < listaPoruka.Poruke.Count; i++) { Poruka poruka = listaPoruka.Poruke[i]; EnkripcijskiPaket paket = listaPoruka.Poruke[i].Paket; dataGridViewPrimljeno.Rows.Add("", poruka, poruka.Posiljatelj, poruka.Primatelj, poruka.DatumSlanja, paket.EnkriptiraniKljuc, paket.EnkriptiraniPodaci, Convert.ToBase64String(paket.Iv)); } } }
/// <summary> /// Konstuktor FormePregled koji inicijalizira formu, oblikuje gridview te odmah dohvaća primljenje poruke korisnika s obzirom /// da je tab aktivan prilikom inicijalizacije forme /// </summary> /// <param name="forma"></param> /// <param name="korisnik"></param> public FormaPregled(Form1 forma, Korisnik korisnik) { InitializeComponent(); Dizajner.FormaBezOkna(this); glavnaForma = forma; prijavljeniKorisnik = korisnik; FormirajDataGridove(); klijent = new TcpKlijent(); listaPoruka = new ListaPoruka(); listaPoruka.Username = prijavljeniKorisnik.Username; klijent.PosaljiServeru(listaPoruka, "DohvatiPrimljenePoruke"); listaPoruka = (ListaPoruka)klijent.PrimiOdServera(); listaPoruka.Poruke = listaPoruka.Poruke.OrderByDescending(x => x.DatumSlanja).ToList(); for (int i = 0; i < listaPoruka.Poruke.Count; i++) { Poruka poruka = listaPoruka.Poruke[i]; EnkripcijskiPaket paket = listaPoruka.Poruke[i].Paket; dataGridViewPrimljeno.Rows.Add("", poruka, poruka.Posiljatelj, poruka.Primatelj, poruka.DatumSlanja, paket.EnkriptiraniKljuc, paket.EnkriptiraniPodaci, Convert.ToBase64String(paket.Iv)); } }