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("Как Вы здесь оказались?"); } }