private void buttonOdszyfrowywanieWczytaj_Click(object sender, RoutedEventArgs e) { _sciezkaWejsciaOdszyfrowywanie.ShowDialog(); textboxOdszyfrowywanieWejscie.Text = _sciezkaWejsciaOdszyfrowywanie.FileName; if (textboxOdszyfrowywanieWejscie.Text == "") { return; } listboxOdszyfrowywanieOdbiorcy.Items.Clear(); Wejscie = textboxOdszyfrowywanieWejscie.Text; try { _wczytaneDane = NaglowekPliku.Deserjalizacja(Wejscie); foreach (var odbiorca in _wczytaneDane.ListaOdbiorcow) { listboxOdszyfrowywanieOdbiorcy.Items.Add(odbiorca.Nazwa); } listboxOdszyfrowywanieLog.Items.Add("wyznaczono plik do odszyfrowania"); } catch (Exception) { textboxOdszyfrowywanieWejscie.Text = ""; Wejscie = null; MessageBox.Show("Niepoprawny plik do odszyfrowania", "błąd"); listboxOdszyfrowywanieLog.Items.Add("Niepoprawny plik do odszyfrowania"); } }
public static void Serjalizacja(NaglowekPliku obj, string wyjscieSciezka) { var serjalizator = new XmlSerializer(typeof(NaglowekPliku)); using (TextWriter writer = new StreamWriter(wyjscieSciezka)) { serjalizator.Serialize(writer, obj); } }
public static void OdszyfrowywanieRc6(string wejscie, string wyjscie, Odbiorcy odbiorca, NaglowekPliku naglowek, MainWindow window) { //data var reader2 = new StreamReader(wejscie); var reader = new FileMy(reader2); while (true) { var searcher = reader.ReadLine(); if (searcher != null && searcher.StartsWith("</EnctyptedFileHeader>")) break; } var position = reader.Position; reader.Close(); var entry = new FileStream(wejscie, FileMode.Open) { Position = position }; var exit = new System.IO.FileStream(wyjscie, FileMode.Create); //decrypt var blockCipher = CreateCipher(naglowek.Tryb, naglowek.WielkoscPodBloku); ICipherParameters parameters; if (naglowek.Tryb == "ECB") parameters = new KeyParameter(odbiorca.KluczSesyjny); else parameters = new ParametersWithIV(new KeyParameter(odbiorca.KluczSesyjny), naglowek.Iv); blockCipher.Init(false, parameters); //date for progresbar long lenghtFile = entry.Length; double progres = lenghtFile / 1000; long actuallyLenght = 0; //date for encrypt var buffer = new byte[16]; var outputBytes = new byte[blockCipher.GetOutputSize(buffer.Length)]; var length = 0; int bytesRead; while ((bytesRead = entry.Read(buffer, 0, buffer.Length)) > 0) { length = blockCipher.ProcessBytes(buffer, 0, bytesRead, outputBytes, 0); exit.Write(outputBytes, 0, length); //progresbar actuallyLenght += bytesRead; if (actuallyLenght > progres) { window.progressBarOdszyfrowywanie.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { window.progressBarOdszyfrowywanie.Value += 0.1; } )); actuallyLenght -= (long) progres; } } length = blockCipher.DoFinal(outputBytes, 0); exit.Write(outputBytes, 0, length); entry.Close(); exit.Close(); }
//------------- public static void SzyfrowanieRc6(string wejscie, string wyjscie, byte[] kluczsesyjny, NaglowekPliku naglowek, MainWindow window) { //entry var entry = new FileStream(wejscie, FileMode.Open); //exit var enter = Environment.NewLine; var enterdata = Encoding.UTF8.GetBytes(enter); var exit = new FileStream(wyjscie, FileMode.Append); exit.Write(enterdata, 0, enterdata.Length); // dodanie entera po xmlu var blockCipher = CreateCipher(naglowek.Tryb, naglowek.WielkoscPodBloku); ICipherParameters parameters; if (naglowek.Tryb == "ECB") parameters = new KeyParameter(kluczsesyjny); else parameters = new ParametersWithIV(new KeyParameter(kluczsesyjny), naglowek.Iv); blockCipher.Init(true, parameters); //date for progresbar var lenghtFile = entry.Length; double progres = lenghtFile/1000; long actuallyLenght = 0; //date for encrypt var buffer = new byte[16]; byte[] outputBytes = null; var length = 0; int bytesRead; outputBytes = new byte[blockCipher.GetOutputSize(buffer.Length)]; while ((bytesRead = entry.Read(buffer, 0, buffer.Length)) > 0) { length = blockCipher.ProcessBytes(buffer, 0, bytesRead, outputBytes, 0); exit.Write(outputBytes, 0, length); //progresbar actuallyLenght += bytesRead; if (actuallyLenght > progres) { window.progressBarSzyfrowanie.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { window.progressBarSzyfrowanie.Value += 0.1; } )); actuallyLenght -= (long) progres; } } length = blockCipher.DoFinal(outputBytes, 0); exit.Write(outputBytes, 0, length); exit.Close(); entry.Close(); }
private void buttonSzyfrowanieSzyfruj_Click(object sender, RoutedEventArgs e) { Wejscie = textboxSzyfrowanieWejscie.Text; Wyjscie = textboxSzyfrowanieWyjscie.Text; DlKlucza = int.Parse(comboboxSzyfrowanieDlKlucza.Text); Podblok = int.Parse(comboboxSzyfrowaniePodblok.Text); Blok = 128; //-------------------------------------------------------// var kluczSesyjny = RC6.GeneratorKluczaSesyjnego(DlKlucza); var iv = RC6.GeneratorIv(Blok); //dlugosc bloku var listaOdbiorcow = new List <Odbiorcy>(); foreach (var x in _odbiorcy) { listaOdbiorcow.Add(new Odbiorcy(x, kluczSesyjny)); } bool fine = true; if (Wejscie == "") { listboxSzyfrowanieLog.Items.Add("Nie podano pliku do zaszyfrowania"); MessageBox.Show("Nie podano pliku do zaszyfrowania", "błąd"); fine = false; } else if (Wyjscie == "") { listboxSzyfrowanieLog.Items.Add("Nie podano miejsca zapisu"); MessageBox.Show("Nie podano miejsca zapisu", "błąd"); fine = false; } else if (listaOdbiorcow.Count == 0) { listboxSzyfrowanieLog.Items.Add("Nie dodano zadnego odbiorcy"); MessageBox.Show("Nie dodano zadnego odbiorcy", "błąd"); fine = false; } if (!fine) { return; } listboxSzyfrowanieLog.Items.Add("rozpoczeto szyfrowanie"); NaglowekPliku naglowek = new NaglowekPliku(Blok, Tryb, iv, DlKlucza, Podblok, listaOdbiorcow); NaglowekPliku.Serjalizacja(naglowek, Wyjscie); new Thread( delegate() { RC6.SzyfrowanieRc6(Wejscie, Wyjscie, kluczSesyjny, naglowek, this); Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { listboxSzyfrowanieLog.Items.Add("zakonczono szyfrowanie"); progressBarSzyfrowanie.Value = 100; MessageBox.Show("zakonczono szyfrowanie", "Info"); ResetSzyfrowanie(); } )); } ).Start(); }