Compartilhar via


Como: Descriptografar os elementos XML com certificados x. 509

Você pode usar as classes de System.Security.Cryptography.Xml o namespace para criptografar e descriptografar um elemento dentro de um documento XML. Criptografia XML é uma maneira padrão de troca ou armazena os dados criptografados de XML, sem se preocupar sobre os dados que está sendo lidos facilmente. Para obter mais informações sobre o padrão de criptografia XML, 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 sem formatação original.

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

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

Para descriptografar um elemento XML com um certificado x. 509

  1. Criar um XmlDocument objeto carregando um arquivo XML a partir do disco. O XmlDocument objeto contém o elemento XML para descriptografar.

    Dim xmlDoc As New XmlDocument()
    
    XmlDocument xmlDoc = new XmlDocument();
    
  2. Criar um novo EncryptedXml o objeto, passando a XmlDocument o 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. Salve 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 que o 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 este 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 é apenas a fins de teste. Aplicativos devem usar um certificado x. 509 gerado por uma autoridade de certificação confiável ou usar um certificado gerado pelo servidor de certificado Microsoft Windows.

Consulte também

Tarefas

Como: criptografar elementos XML com certificados X.509

Referência

System.Security.Cryptography.Xml

Outros recursos

Criptografia XML e assinaturas digitais