Procedura: decrittografare gli elementi XML con certificati X.509
Aggiornamento: novembre 2007
È 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
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();
Creare un nuovo oggetto EncryptedXml passando l'oggetto XmlDocument al costruttore.
Dim exml As New EncryptedXml(Doc)
EncryptedXml exml = new EncryptedXml(Doc);
Decrittografare il documento XML utilizzando il metodo DecryptDocument.
exml.DecryptDocument()
exml.DecryptDocument();
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
Per compilare l'esempio, è necessario includere un riferimento a System.Security.dll.
Includere gli spazi dei nomi seguenti: System.Xml, System.Security.Cryptography e System.Security.Cryptography.Xml.
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