public Rabin_Cryptosystem(string[] args)
        {
            InitializeComponent();
            mainBar = new ProgressBarForManyProcesses(progressBar1);
            imageList1.Images.Add(".publicKey", Properties.Resources.PublicKey);
            imageList1.Images.Add(".privateKey", Properties.Resources.PrivateKey);
            imageList1.Images.Add(".encrypted", Properties.Resources.Encrypted);
            foreach (string fileName in args)
            {
                string extention;
                try
                {
                    extention = Path.GetExtension(fileName);
                    switch (extention)
                    {
                    case (".publicKey"):
                    case (".privateKey"):
                        AddFileItemToListView(fileName, listKeys, imageList1);
                        break;

                    default:
                        AddFileItemToListView(fileName, listFiles, imageList1);
                        break;
                    }
                }
                catch { }
            }
        }
        private async void  decryptToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (rab == null)
            {
                MessageBox.Show("Не выбран закрытый ключ", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            if (Path.GetExtension(listSelectedKey.Items[0].Tag.ToString()).CompareTo(".privateKey") != 0)
            {
                MessageBox.Show("Не тот ключ!\r\nВыберите закрытый ключ", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            string folder = BrouseFolder();

            if (string.IsNullOrEmpty(folder))
            {
                return;
            }
            foreach (ListViewItem item in listFiles.SelectedItems)
            {
                if (!IsExistInDecryptItems(item))
                {
                    item.SubItems[0].Tag  = rab;
                    item.SubItems[0].Name = folder;
                    decryptingItems.Add(item);
                    ProgressBar      pb       = CreateProgressBar(item, listFiles);
                    ReachProgressBar filesBar = new ReachProgressBar(pb);
                    filesBar.Tag = pb.Name;
                    mainBar.AddProcess(filesBar);
                }
                else
                {
                    MessageBox.Show($"Файл с именем: {item.Text}\r\nуже добавлен в очередь", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }
            }
            if (decryptingItems.Count != listFiles.SelectedItems.Count)
            {
                return;
            }
            var progress = new Progress <ProgressInfo>();

            progress.ProgressChanged += mainBar.Apdate;
            while (decryptingItems.Count > 0)
            {
                string           decryptPath = decryptingItems[0].SubItems[0].Name + "\\" + Path.GetFileNameWithoutExtension(decryptingItems[0].Text);
                ReachProgressBar filesBar    = mainBar.Processes.OfType <ReachProgressBar>().FirstOrDefault(q => (string)q.Tag == (string)decryptingItems[0].Tag);
                if (Path.GetExtension(decryptingItems[0].Tag.ToString()).CompareTo(".encrypted") != 0)
                {
                    MessageBox.Show("Невозможно расшифровать файл " + decryptingItems[0].Text + "\n\rФайл не содержит расширение \".encrypted\"", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag));
                    decryptingItems.Remove(decryptingItems[0]);
                    mainBar.RemoveProcess(filesBar);
                    continue;
                }
                progress.ProgressChanged += filesBar.Reach;
                try { await((RabinLib.Rabin)decryptingItems[0].SubItems[0].Tag).DecryptAsync(decryptingItems[0].Tag.ToString(), decryptPath, progress); }
                catch
                {
                    MessageBox.Show(
                        $"{decryptingItems[0].Text} Невозможно раскодировать с использованием ключа {((RabinLib.Rabin)decryptingItems[0].SubItems[0].Tag).Tag.ToString()}", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    progress.ProgressChanged -= filesBar.Reach;
                    listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag));
                    decryptingItems.Remove(decryptingItems[0]);
                    mainBar.RemoveProcess(filesBar);
                    continue;
                }
                progress.ProgressChanged -= filesBar.Reach;
                listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag));
                ListFilesRemoveItem(decryptingItems[0]);
                decryptingItems.Remove(decryptingItems[0]);
                AddFileItemToListView(decryptPath, listFiles, imageList1);
            }
            mainBar.Apdate(this, null);
            if (encryptingItems.Count == 0 && decryptingItems.Count == 0)
            {
                mainBar = new ProgressBarForManyProcesses(progressBar1, new List <ReachProgressBar>());
            }
        }
Пример #3
0
 public GenKey(Rabin_Cryptosystem form)
 {
     mainBar  = form.mainBar;
     baseForm = form;
     InitializeComponent();
 }