Compartilhar via


Como: Decodificar elementos do XML com certificados X.509

Você pode usar as classes no System.Security.Cryptography.Xml namespace para criptografar e descriptografar um elemento dentro de um documento XML. Criptografia XML é uma forma padrão para trocar ou armazenar dados criptografados do XML, sem se preocupar com os dados que está sendo lidos com com facilidade.Para obter mais informações sobre a criptografia XML padrão, consulte que a especificação de World Wide Web Consortium (W3C) para criptografia XML localizado em http://www.w3.org/TR/xmldsig-core/.

Este exemplo descriptografa um elemento XML que foi criptografado usando os métodos descritos em: Como: criptografar elementos XML com certificados X.509.Ele encontra um <EncryptedData>elemento, descriptografa o elemento e, em seguida, substitui o elemento com o elemento XML de texto não criptografado original.

O exemplo de código neste procedimento descriptografa um elemento XML usando um certificado X.509 do armazenamento de certificado local de conta de usuário corrente.O exemplo usa o DecryptDocumentmétodo para recuperar o certificado X.509 e descriptografar a chave armazenada em uma sessão de automaticamente o <EncryptedKey>elemento o <EncryptedData>elemento. The DecryptDocument método, em seguida, usa automaticamente a chave de sessão para descriptografar o elemento XML.

Este exemplo é apropriado para situações em que vários aplicativos precisam compartilhe dados criptografados ou onde um aplicativo precisa salvar os dados criptografados entre as horas que ele seja executado.

Para descriptografar um elemento XML com um certificado X.509

  1. criar an XmlDocument objeto carregando um arquivo XML do disco. The XmlDocument objeto contém o elemento XML para descriptografar.

    Dim xmlDoc As New XmlDocument()
    
    XmlDocument xmlDoc = new XmlDocument();
    
  2. Criar um novo EncryptedXml objeto passando o XmlDocument objeto para o construtor.

    Dim exml As New EncryptedXml(Doc)
    
    EncryptedXml exml = new EncryptedXml(Doc);
    
  3. Descriptografar o documento XML usando o DecryptDocument método.

    exml.DecryptDocument()
    
    exml.DecryptDocument();
    
  4. salvar o XmlDocument objeto.

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

Exemplo

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();

    }
}

Este exemplo assume que um arquivo chamado "test.xml" existe no mesmo diretório do programa compilado. Ele também pressupõe que "test.xml" contém um "creditcard" elemento. Você pode colocar o XML a seguir em um arquivo denominado test.xml e usá-lo com esse exemplo.

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

Compilando o código

Segurança

O certificado X.509 usado neste exemplo é para fins de teste somente.Aplicativos devem usar um certificado X.509 gerado por uma autoridade de certificação confiável ou usar um certificado gerado pelo Microsoft Windows Certificate servidor.

Consulte também

Tarefas

Como: criptografar elementos XML com certificados X.509

Referência

System.Security.Cryptography.Xml

Outros recursos

Assinaturas digital e criptografia XML