Поделиться через


Практическое руководство. Расшифровка XML-элементов с помощью сертификатов X.509

Для шифрования и расшифровки элемента XML-документа могут использоваться классы, принадлежащие пространству имен System.Security.Cryptography.Xml. Шифрование XML-данных является стандартным способом обмена и хранения XML-данных, защищающим их от несанкционированного прочтения. Дополнительные сведения о стандарте шифрования XML-данных см. в спецификации консорциума W3C по шифрованию XML-данных, расположенной на веб-узле по адресу: http://www.w3.org/TR/xmldsig-core/.

В этом примере производится расшифровка XML-элемента, зашифрованного с помощью метода, описанного в разделе Практическое руководство. Шифрование XML-элементов с помощью сертификатов X.509. Производится поиск элемента EncryptedData, его расшифровка и замещение элемента исходным XML-элементом в формате простого текста.

В данном примере кода выполняется расшифровка XML-элемента с помощью сертификата X.509 из локального хранилища сертификатов текущей учетной записи пользователя. В примере используется метод DecryptDocument для автоматического извлечения сертификата X.509 и расшифровки ключа сеанса, хранящегося в элементе EncryptedKey элемента EncryptedData. Далее метод DecryptDocument автоматически использует ключ сеанса для расшифровки XML-элемента.

Этот пример применим в том случае, если необходимо обеспечить общий доступ к зашифрованным данным со стороны нескольких приложений, или если приложение должно сохранять зашифрованные данные между запусками.

Расшифровка XML-элемента с помощью сертификата X.509

  1. Создайте объект XmlDocument путем загрузки XML-файла с диска. Объект XmlDocument содержит XML-элемент, подлежащий расшифровке.

    Dim xmlDoc As New XmlDocument()
    
    XmlDocument xmlDoc = new XmlDocument();
    
  2. Создайте новый объект EncryptedXml, передав конструктору объект XmlDocument.

    Dim exml As New EncryptedXml(Doc)
    
    EncryptedXml exml = new EncryptedXml(Doc);
    
  3. Произведите расшифровку XML-документа с помощью метода DecryptDocument.

    exml.DecryptDocument()
    
    exml.DecryptDocument();
    
  4. Сохраните объект XmlDocument.

    xmlDoc.Save("test.xml")
    
    xmlDoc.Save("test.xml");
    

Пример

Imports System
Imports System.Xml
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Security.Cryptography.X509Certificates



Module Program

    Sub Main(ByVal args() As String)
        Try
            ' Create an XmlDocument object.
            Dim xmlDoc As New XmlDocument()
            ' Load an XML file into the XmlDocument object.
            xmlDoc.PreserveWhitespace = True
            xmlDoc.Load("test.xml")

            ' Decrypt the document.
            Decrypt(xmlDoc)

            ' Save the XML document.
            xmlDoc.Save("test.xml")
            ' Display the decrypted XML to the console.
            Console.WriteLine("Decrypted XML:")
            Console.WriteLine()
            Console.WriteLine(xmlDoc.OuterXml)

        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub


    Sub Decrypt(ByVal Doc As XmlDocument)
        ' Check the arguments.  
        If Doc Is Nothing Then
            Throw New ArgumentNullException("Doc")
        End If

        ' Create a new EncryptedXml object.
        Dim exml As New EncryptedXml(Doc)
        ' Decrypt the XML document.
        exml.DecryptDocument()
    End Sub
End Module
using System;
using System.Xml;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography.X509Certificates;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Create an XmlDocument object.
            XmlDocument xmlDoc = new XmlDocument();

            // Load an XML file into the XmlDocument object.
            xmlDoc.PreserveWhitespace = true;
            xmlDoc.Load("test.xml");

            // Decrypt the document.
            Decrypt(xmlDoc);

            // Save the XML document.
            xmlDoc.Save("test.xml");

            // Display the decrypted XML to the console.
            Console.WriteLine("Decrypted XML:");
            Console.WriteLine();
            Console.WriteLine(xmlDoc.OuterXml);

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

    }

    public static void Decrypt(XmlDocument Doc)
    {
        // Check the arguments.  
        if (Doc == null)
            throw new ArgumentNullException("Doc");


        // Create a new EncryptedXml object.
        EncryptedXml exml = new EncryptedXml(Doc);

        // Decrypt the XML document.
        exml.DecryptDocument();

    }
}

В этом примере предполагается, что файл с именем "test.xml" существует в том же каталоге, что и скомпилированная программа. Также предполагается, что файл "test.xml" содержит элемент "creditcard". Можно поместить следующий XML-код в файл с именем test.xml и использовать его в данном примере.

<root>
    <creditcard>
        <number>19834209</number>
        <expiry>02/02/2002</expiry>
    </creditcard>
</root>

Компиляция кода

Безопасность

Сертификат X.509, использованный в данном примере, предназначен только для тестирования. Приложения должны использовать сертификаты X.509, созданные доверенным центром сертификации или сервером сертификации Microsoft Windows.

См. также

Задачи

Практическое руководство. Шифрование XML-элементов с помощью сертификатов X.509

Ссылки

System.Security.Cryptography.Xml

Другие ресурсы

Шифрование и цифровые подписи в XML