Condividi tramite


Procedura: decrittografare gli elementi XML con certificati X.509

È possibile utilizzare le classi dello spazio dei nomi System.Security.Cryptography.Xml per crittografare e decrittografare un elemento all'interno di un documento XML. La crittografia XML è un sistema standard per lo scambio o la memorizzazione di dati XML crittografati che garantisce un'adeguata protezione da letture non autorizzate. Per ulteriori informazioni sulla crittografia XML, vedere la specifica W3C (World Wide Web Consortium) relativa a questo standard all'indirizzo http://www.w3.org/TR/xmldsig-core/ (informazioni in lingua inglese).

In questo esempio viene decrittografato un elemento XML che è stato crittografato utilizzando i metodi descritti in Procedura: crittografare gli elementi XML con certificati X.509. Un elemento <EncryptedData> viene trovato, decrittografato e sostituito con l'elemento XML originale in testo non crittografato.

Nell'esempio di codice riportato in questa procedura viene decrittografato un elemento XML utilizzando un certificato X.509 dell'archivio certificati locale dell'account utente corrente. Nell'esempio il metodo DecryptDocument viene utilizzato per recuperare automaticamente il certificato X.509 e decrittografare una chiave di sessione memorizzata nell'elemento <EncryptedKey> dell'elemento <EncryptedData>. Il metodo DecryptDocument utilizza quindi automaticamente la chiave di sessione per decrittografare l'elemento XML.

Questo esempio si riferisce alle situazioni in cui più applicazioni devono condividere dati crittografati o un'applicazione deve salvare i dati crittografati tra un'esecuzione e l'altra.

Per decrittografare un elemento XML con un certificato X.509

  1. Creare un oggetto XmlDocument caricando un file XML dal disco. L'oggetto XmlDocument contiene l'elemento XML da decrittografare.

    Dim xmlDoc As New XmlDocument()
    
    XmlDocument xmlDoc = new XmlDocument();
    
  2. Creare un nuovo oggetto EncryptedXml passando l'oggetto XmlDocument al costruttore.

    Dim exml As New EncryptedXml(Doc)
    
    EncryptedXml exml = new EncryptedXml(Doc);
    
  3. Decrittografare il documento XML utilizzando il metodo DecryptDocument.

    exml.DecryptDocument()
    
    exml.DecryptDocument();
    
  4. Salvare l'oggetto XmlDocument.

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

Esempio

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

    }
}

In questo esempio si presuppone che un file denominato "test.xml" si trovi nella stessa directory del programma compilato e che contenga un elemento "creditcard". È possibile inserire i dati XML riportati di seguito in un file denominato test.xml e utilizzarlo con questo esempio.

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

Compilazione del codice

Sicurezza

Il certificato X.509 utilizzato in questo esempio è valido solo a scopo di testing. Le applicazioni devono utilizzare un certificato X.509 generato da un'autorità di certificazione attendibile o un certificato generato da Microsoft Windows Certificate Server.

Vedere anche

Attività

Procedura: crittografare gli elementi XML con certificati X.509

Riferimenti

System.Security.Cryptography.Xml

Altre risorse

Crittografia XML e firme digitali