コード例 #1
0
        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");
            }
        }
コード例 #2
0
        public static void Serjalizacja(NaglowekPliku obj, string wyjscieSciezka)
        {
            var serjalizator = new XmlSerializer(typeof(NaglowekPliku));

            using (TextWriter writer = new StreamWriter(wyjscieSciezka))
            {
                serjalizator.Serialize(writer, obj);
            }
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        //-------------

        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();
        }
コード例 #5
0
        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();
        }