Ejemplo n.º 1
0
        private static XmlDocument DecryptXmlDocument(XmlDocument encryptedXmlDocument, Gost_28147_89_SymmetricAlgorithm sharedKey)
        {
            // Создание объекта для дешифрации XML
            var encryptedXml = new GostEncryptedXml(sharedKey.ProviderType, encryptedXmlDocument);

            var nsManager = new XmlNamespaceManager(encryptedXmlDocument.NameTable);

            nsManager.AddNamespace("enc", EncryptedXml.XmlEncNamespaceUrl);

            // Поиск всех зашифрованных XML-элементов
            var encryptedDataList = encryptedXmlDocument.SelectNodes("//enc:EncryptedData", nsManager);

            if (encryptedDataList != null)
            {
                foreach (XmlElement encryptedData in encryptedDataList)
                {
                    // Загрузка элемента EncryptedData
                    var elementEncryptedData = new EncryptedData();
                    elementEncryptedData.LoadXml(encryptedData);

                    // Расшифровка элемента EncryptedData
                    var decryptedData = encryptedXml.DecryptData(elementEncryptedData, sharedKey);

                    // Замена элемента EncryptedData его расшифрованным представлением
                    encryptedXml.ReplaceData(encryptedData, decryptedData);
                }
            }

            return(encryptedXmlDocument);
        }
Ejemplo n.º 2
0
        private static XmlDocument DecryptXmlDocument(XmlDocument encryptedXmlDocument)
        {
            // Создание объекта для дешифрации XML
            var encryptedXml = new GostEncryptedXml(encryptedXmlDocument);

            var nsManager = new XmlNamespaceManager(encryptedXmlDocument.NameTable);

            nsManager.AddNamespace("enc", EncryptedXml.XmlEncNamespaceUrl);

            // Поиск всех зашифрованных XML-элементов
            var encryptedDataList = encryptedXmlDocument.SelectNodes("//enc:EncryptedData", nsManager);

            if (encryptedDataList != null)
            {
                foreach (XmlElement encryptedData in encryptedDataList)
                {
                    // Загрузка элемента EncryptedData
                    var elementEncryptedData = new EncryptedData();
                    elementEncryptedData.LoadXml(encryptedData);

                    // Извлечение симметричный ключ для расшифровки элемента EncryptedData
                    var sessionKey = GetDecryptionKey(elementEncryptedData);

                    if (sessionKey != null)
                    {
                        // Расшифровка элемента EncryptedData
                        var decryptedData = encryptedXml.DecryptData(elementEncryptedData, sessionKey);

                        // Замена элемента EncryptedData его расшифрованным представлением
                        encryptedXml.ReplaceData(encryptedData, decryptedData);
                    }
                }
            }

            return(encryptedXmlDocument);
        }