コード例 #1
0
        private void decryptBtn_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            CryptoKey key = keysLB.SelectedItem as CryptoKey;

            if (key.KeyPurpose == CryptoKey.Purpose.Encryption)
            {
                if (key.PublicOnly)
                {
                    Utils.ShowWarning("Для расшифрования файла необходимо иметь закрытый ключ");
                    return;
                }

                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "Расшифровать файл...";
                if (ofd.ShowDialog().Value)
                {
                    string input = File.ReadAllText(ofd.FileName);
                    byte[] output;
                    try
                    {
                        output = Cryptography.E.GetBytes(Cryptography.Decrypt(input, key));
                    }
                    catch (Exception ex)
                    {
                        output = null;
                    }

                    if (output == null)
                    {
                        Utils.ShowError("Не удалось расшифровать файл");
                    }
                    else
                    {
                        SaveFileDialog sfd = new SaveFileDialog();
                        sfd.Title = "Сохранить расшифрованный файл...";
                        if (sfd.ShowDialog().Value)
                        {
                            File.WriteAllBytes(sfd.FileName, output);
                        }
                    }
                }
            }
            else if (key.KeyPurpose == CryptoKey.Purpose.Signature)
            {
                OpenFileDialog ofd1 = new OpenFileDialog();
                ofd1.Title = "Открыть файл для проверки подписи...";
                if (ofd1.ShowDialog().Value)
                {
                    OpenFileDialog ofd2 = new OpenFileDialog();
                    ofd2.Title      = "Открыть файл подписи...";
                    ofd2.DefaultExt = CryptoKey.DEFAULT_SIGNATURE_EXT;
                    if (ofd2.ShowDialog().Value)
                    {
                        byte[] input     = File.ReadAllBytes(ofd1.FileName);
                        string signature = File.ReadAllText(ofd2.FileName);
                        bool?  result;
                        try
                        {
                            result = Cryptography.Verify(Cryptography.E.GetString(input), signature, key);
                        }
                        catch (Exception ex)
                        {
                            result = null;
                        }

                        if (result == null)
                        {
                            Utils.ShowError("Не удалось проверить подпись файла");
                        }
                        else
                        {
                            if (result.Value)
                            {
                                Utils.ShowInfo("Файл успешно прошёл верификацию");
                            }
                            else
                            {
                                Utils.ShowError("Верификация не пройдена");
                            }
                        }
                    }
                }
            }
            else
            {
                throw new NotImplementedException("Как Вы здесь оказались?");
            }
        }