예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        /// <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;
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
 /// <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
         {
         }
     }
 }
예제 #7
0
        /// <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));
                }
            }
        }
예제 #8
0
        /// <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));
            }
        }