/// <summary> /// Metoda koja služi za dekripciju datoteke. /// Za dekripciju same datoteke 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 datoteka. /// Zatim se taj ključ i inicijalizacijski vektor pridružuje aes objektu koji zatim može dekriptirati sam sadržaj datoteke. /// </summary> /// <param name="file"></param> /// <param name="kljuc"></param> /// <param name="iv"></param> /// <param name="privatniKljuc"></param> /// <returns></returns> public static byte[] DecryptFile(byte[] file, string kljuc, byte[] iv, string privatniKljuc) { AesEnkripcija aes = new AesEnkripcija(); Enkripcija rsa = new RsaEnkripcija(); rsa.PridruziPrivatniKljuc(privatniKljuc); var dekriptiraniKljuc = rsa.DecryptData(kljuc); aes.PridruziKljucIV(Convert.FromBase64String(dekriptiraniKljuc), iv); var decryptedData = aes.DecryptFile(file); return(decryptedData); }
/// <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> /// 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> /// Pomoćna funkcija za funkciju RegistrirajKorisnika() koja zapisuje sve potrebne ključeve u bazu podataka(Javni,Privatni,2FA) /// </summary> /// <param name="connection"></param> private void ZapisiKljuceveUBazu(SqlConnection connection) { var command = new SqlCommand(); Enkripcija enkripcija = new RsaEnkripcija(); enkripcija.AssignRsaKeys(); JavniKljuc = enkripcija.DohvatiJavniKljuc(); command = new SqlCommand(); command.Connection = connection; command.CommandType = CommandType.Text; command.CommandText = "UPDATE Korisnik SET JavniKljuc = @JavniKljuc WHERE Username=@Username"; command.Parameters.AddWithValue("@JavniKljuc", JavniKljuc); command.Parameters.AddWithValue("@Username", Username); command.ExecuteNonQuery(); command = new SqlCommand(); command.Connection = connection; command.CommandType = CommandType.Text; command.CommandText = "INSERT INTO PrivatniKljucevi(Username,PrivatniKljuc) VALUES (@Username,@PrivatniKljuc)"; command.Parameters.AddWithValue("@PrivatniKljuc", enkripcija.DohvatiPrivatniKljuc()); command.Parameters.AddWithValue("@Username", Username); command.ExecuteNonQuery(); if (Kljuc2FA == "DA") { Verficiranje2FA verificiranje = new Verficiranje2FA(); Kljuc2FA = verificiranje.GenerirajKljuc2FA(); command = new SqlCommand(); command.Connection = connection; command.CommandType = CommandType.Text; command.CommandText = "UPDATE Korisnik SET Kljuc2FA = @Kljuc2FA WHERE Username=@Username"; command.Parameters.AddWithValue("@Kljuc2FA", Kljuc2FA); command.Parameters.AddWithValue("@Username", Username); command.ExecuteNonQuery(); } DropboxManager dropbox = new DropboxManager(); dropbox.CreateANewFolder(Username); }
/// <summary> /// Event handler koji se aktivira prilikom klika na gumb Generiraj. Na temelju pripadajućeg odabira vrste algoritma /// generiraju se potrebni ključevi i inicijalizacijski vektori potrebni za određenu vrsu algoritma enkripcije. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gumbGeneriraj_Click(object sender, EventArgs e) { if (odabirAlgoritam.SelectedValue == (object)"AES") { Enkripcija aesEnkripcija = new AesEnkripcija(); aesEnkripcija.GenerirajKljucIV(); odabirPrvo.Text = Convert.ToBase64String(aesEnkripcija.DohvatiAESKljuc()); odabirDrugo.Text = Convert.ToBase64String(aesEnkripcija.DohvatiIV()); trenutna = aesEnkripcija; } if (odabirAlgoritam.SelectedValue == (object)"RSA") { Enkripcija rsaEnkripcija = new RsaEnkripcija(); rsaEnkripcija.AssignRsaKeys(); odabirPrvo.Text = rsaEnkripcija.DohvatiJavniKljuc(); odabirDrugo.Text = rsaEnkripcija.DohvatiPrivatniKljuc(); trenutna = rsaEnkripcija; } if (odabirAlgoritam.SelectedValue == (object)"DES") { Enkripcija des = new DesEnkripcija(); des.GenerirajKljucIV(); odabirPrvo.Text = Convert.ToBase64String(des.DohvatiAESKljuc()); odabirDrugo.Text = Convert.ToBase64String(des.DohvatiIV()); trenutna = des; } if (odabirAlgoritam.SelectedValue == (object)"TripleDES") { Enkripcija tripleDes = new TripleDesEnkripcija(); tripleDes.GenerirajKljucIV(); odabirPrvo.Text = Convert.ToBase64String(tripleDes.DohvatiAESKljuc()); odabirDrugo.Text = Convert.ToBase64String(tripleDes.DohvatiIV()); trenutna = tripleDes; } gumbEnkriptiraj.Enabled = true; }