/// <summary> /// Вспомогательный прокси метод для тестирования шифрования на асимметричном ключе /// </summary> /// <param name="gostKey"></param> private void Encrypt(AsymmetricAlgorithm gostKey) { if (gostKey is Gost3410 gost3410) { Console.WriteLine("Секретный ключ получен."); // и получаем открытый ключ. Gost3410Parameters publicKey = gost3410.ExportParameters(false); Console.WriteLine("На стороне отправителя..."); // Полученный открытый ключ передаем отправителю сообщения. using (Gost3410CryptoServiceProvider pubKey = new Gost3410CryptoServiceProvider()) { pubKey.ImportParameters(publicKey); Console.WriteLine("Открытый ключ получен."); // Создаем Xml файл для зашифрования. CreateSomeXml("ato_encrypt_2001.xml"); Console.WriteLine("Создан новый XML файл."); // Зашифровываем узел, заданный xpath выражением, XML документа // ato_encrypt.xml в документ a_encrypted.xml // Для зашифрования используется открытый ключ pubKey. Encrypt("ato_encrypt_2001.xml", "a_encrypted_2001.xml", "//SomeNode[@ToEncrypt='true']", "EncryptedElement1", pubKey, "KeyAlias"); Console.WriteLine("Узел XML файла зашифрован."); Console.WriteLine("На стороне получателя..."); Decrypt("a_encrypted_2001.xml", "a_decrypted_2001.xml", gost3410, "KeyAlias"); } } else if (gostKey is Gost3410_2012_256 gost3410_2012_256) { Console.WriteLine("Секретный ключ получен."); // и получаем открытый ключ. Gost3410Parameters publicKey = gost3410_2012_256.ExportParameters(false); Console.WriteLine("На стороне отправителя..."); // Полученный открытый ключ передаем отправителю сообщения. using (Gost3410_2012_256CryptoServiceProvider pubKey = new Gost3410_2012_256CryptoServiceProvider()) { pubKey.ImportParameters(publicKey); Console.WriteLine("Открытый ключ получен."); // Создаем Xml файл для зашифрования. CreateSomeXml("ato_encrypt_2012_256.xml"); Console.WriteLine("Создан новый XML файл."); // Зашифровываем узел, заданный xpath выражением, XML документа // ato_encrypt.xml в документ a_encrypted.xml // Для зашифрования используется открытый ключ pubKey. Encrypt("ato_encrypt_2012_256.xml", "a_encrypted_2012_256.xml", "//SomeNode[@ToEncrypt='true']", "EncryptedElement1", pubKey, "KeyAlias"); Console.WriteLine("Узел XML файла зашифрован."); Console.WriteLine("На стороне получателя..."); Decrypt("a_encrypted_2012_256.xml", "a_decrypted_2012_256.xml", gost3410_2012_256, "KeyAlias"); } } else if (gostKey is Gost3410_2012_512 gost3410_2012_512) { Console.WriteLine("Секретный ключ получен."); // и получаем открытый ключ. Gost3410Parameters publicKey = gost3410_2012_512.ExportParameters(false); Console.WriteLine("На стороне отправителя..."); // Полученный открытый ключ передаем отправителю сообщения. using (Gost3410_2012_512CryptoServiceProvider pubKey = new Gost3410_2012_512CryptoServiceProvider()) { pubKey.ImportParameters(publicKey); Console.WriteLine("Открытый ключ получен."); // Создаем Xml файл для зашифрования. CreateSomeXml("ato_encrypt_2012_512.xml"); Console.WriteLine("Создан новый XML файл."); // Зашифровываем узел, заданный xpath выражением, XML документа // ato_encrypt.xml в документ a_encrypted.xml // Для зашифрования используется открытый ключ pubKey. Encrypt("ato_encrypt_2012_512.xml", "a_encrypted_2012_512.xml", "//SomeNode[@ToEncrypt='true']", "EncryptedElement1", pubKey, "KeyAlias"); Console.WriteLine("Узел XML файла зашифрован."); Console.WriteLine("На стороне получателя..."); Decrypt("a_encrypted_2012_512.xml", "a_decrypted_2012_512bui.xml", gost3410_2012_512, "KeyAlias"); } } else { throw new NotSupportedException(); } Console.WriteLine("XML документ расшифрован."); }