/// <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> /// 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 uploada datoteku na dropbox na temelju putanje datoteke. Username Pošiljatelja datoteke služi za /// formiranje imena datoteke kako bi se znalo tko je datoteku poslao, dok username primatelja služi za formiranje ispravne /// lokacije gdje će se datoteka uploadati. Datoteka se prije uploada enkriptira hibridnom enkripcijom. Uz glavnu datoteku /// šalje se i pomoćna .crypto datoteka koja sadrži enkriptirani AES ključ i inicijalizacijski vektor. /// </summary> /// <param name="filePath"></param> /// <param name="posiljatelj"></param> /// <param name="primatelj"></param> public async Task <int> Upload(string filePath, string posiljatelj, string primatelj, string javniKljuc) { EnkripcijskiPaket paket; string fileName = Path.GetFileName(filePath); string uploadFilePath = path + primatelj + "/primljeno/" + posiljatelj + "_" + fileName; paket = HibridnaEnkripcija.EncryptFile(File.ReadAllBytes(filePath), javniKljuc); byte[] fileToUpload = paket.VratiDatoteku(); string fileName2 = posiljatelj + "_" + Path.GetFileNameWithoutExtension(filePath) + ".crypto"; string uploadFilePath2 = path + primatelj + "/primljeno/" + fileName2; byte[] fileToUpload2 = null; using (var ms = new MemoryStream()) { TextWriter tw = new StreamWriter(ms); tw.WriteLine(paket.EnkriptiraniKljuc); tw.WriteLine(Convert.ToBase64String(paket.Iv)); tw.Flush(); ms.Position = 0; fileToUpload2 = ms.ToArray(); } using (var dbx = new DropboxClient(token)) { using (var mem = new MemoryStream(fileToUpload2)) { var updated = await dbx.Files.UploadAsync(uploadFilePath2, WriteMode.Add.Instance, autorename : true, body : mem); uploadFilePath = path + primatelj + "/primljeno/" + Path.GetFileNameWithoutExtension(updated.AsFile.Name) + Path.GetExtension(fileName); } using (var mem = new MemoryStream((fileToUpload))) { var updated = await dbx.Files.UploadAsync(uploadFilePath, WriteMode.Add.Instance, autorename : true, body : mem); } } return(1); }
/// <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); }