/// <summary> /// Metoda koja preuzima datoteku sa dropbox servera. Prvo se skida pomoćna .crypto datoteka te se iz nje čita inicijalizacijski /// vektor i ključ. Zatim se dohvaća glavna datoteka sa dropbox servera koja se na kraju dekriptira uz pomoć inicijalizacijskoga /// vektora, aes ključa i privatnoga ključa prijavljenoga korisnika. /// </summary> /// <param name="primatelj"></param> /// <param name="posiljatelj"></param> /// <param name="fileName"></param> /// <returns></returns> public async Task <byte[]> Download(string primatelj, string posiljatelj, string fileName) { EnkripcijskiPaket paket = new EnkripcijskiPaket(); byte[] file; byte[] helpFile; string fullName = posiljatelj + "_" + fileName; string downloadFilePath = path + primatelj + "/primljeno/" + fullName; string helpFilePath = path + primatelj + "/primljeno/" + Path.GetFileNameWithoutExtension(fullName) + ".crypto"; using (var dbx = new DropboxClient(token)) { using (var response = await dbx.Files.DownloadAsync(helpFilePath)) { helpFile = await response.GetContentAsByteArrayAsync(); using (var ms = new MemoryStream(helpFile)) { StreamReader msReader = new StreamReader(ms); paket.EnkriptiraniKljuc = msReader.ReadLine(); paket.Iv = Convert.FromBase64String((msReader.ReadLine())); } } using (var response = await dbx.Files.DownloadAsync(downloadFilePath)) { file = await response.GetContentAsByteArrayAsync(); } } file = HibridnaEnkripcija.DecryptFile(file, paket.EnkriptiraniKljuc, paket.Iv, DohvatiPrivatniKljuc(primatelj)); return(file); }
/// <summary> /// Metoda koja služi za enkripciju datoteke. /// Prvo se izgenerira ključ i inicijalizacijski vekor pomoću kojih se aes algoritmom enkriptira sadm sadržaj datoteke. /// Zatim se izgenerirani ključ enkriptira pomoću rsa algoritma i to zahvaljujući javnome ključu koji se prosljeđuje /// samoj metodi. /// </summary> /// <param name="file"></param> /// <param name="javniKljuc"></param> /// <returns></returns> public static EnkripcijskiPaket EncryptFile(byte[] file, string javniKljuc) { EnkripcijskiPaket novi = new EnkripcijskiPaket(); AesEnkripcija aes = new AesEnkripcija(); Enkripcija rsa = new RsaEnkripcija(); rsa.PridruziJavniKljuc(javniKljuc); aes.GenerirajKljucIV(); novi.Iv = aes.DohvatiIV(); novi.PridruziDatoteku(aes.EncryptFile(file)); novi.EnkriptiraniKljuc = rsa.EncryptData(Convert.ToBase64String(aes.DohvatiAESKljuc())); return(novi); }
/// <summary> /// Metoda koja služi za enkripciju poruke s obzirom na sam sadržaj poruke. /// Prvo se izgenerira ključ i inicijalizacijski vekor pomoću kojih se aes algoritmom enkriptira sadm sadržaj poruke. /// Zatim se izgenerirani ključ enkriptira pomoću rsa algoritma i to zahvaljujući javnome ključu koji se prosljeđuje /// samoj metodi. /// </summary> /// <param name="poruka"></param> /// <param name="javniKljuc"></param> /// <returns></returns> public static EnkripcijskiPaket EncryptData(string poruka, string javniKljuc) { EnkripcijskiPaket novi = new EnkripcijskiPaket(); Enkripcija aes = new AesEnkripcija(); Enkripcija rsa = new RsaEnkripcija(); rsa.PridruziJavniKljuc(javniKljuc); aes.GenerirajKljucIV(); novi.Iv = aes.DohvatiIV(); novi.EnkriptiraniPodaci = aes.EncryptData(poruka); novi.EnkriptiraniKljuc = rsa.EncryptData(Convert.ToBase64String(aes.DohvatiAESKljuc())); return(novi); }
/// <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)); } }
/// <summary> /// Metoda koja enkriptira sadrzaj na temelju javnoga ključa te stvara enkripcijski paket koji pridružuje /// svom enkripcijskom paketu. /// </summary> /// <param name="sadrzaj"></param> /// <param name="javniKljuc"></param> public void FormirajEnkripcijskiPaket(string sadrzaj, string javniKljuc) { Paket = HibridnaEnkripcija.EncryptData(sadrzaj, javniKljuc); }
/// <summary> /// Konstruktor Klase Poruka - inicijalizira prazni enkripcijski paket koj se kasnije popunjava /// </summary> public Poruka() { Tip = "Poruka"; Paket = new EnkripcijskiPaket(); }