Comment : déchiffrer des éléments XML avec les certificats X.509
Vous pouvez utiliser les classes dans l'espace de noms System.Security.Cryptography.Xml pour chiffrer et déchiffrer un élément dans un document XML. Le chiffrement XML est une façon standard d'échanger ou de stocker des données XML chiffrées, sans risque que les données soient lues facilement. Pour plus d'informations sur les normes de chiffrement XML, consultez la spécification de chiffrement du World Wide Web Consortium (W3C) à l'adresse http://www.w3.org/TR/xmldsig-core/.
Cet exemple déchiffre un élément XML qui a été chiffré à l'aide des méthodes décrites dans : Comment : chiffrer des éléments XML avec les certificats X.509. Il recherche un élément <EncryptedData>, déchiffre l'élément, puis le remplace par l'élément XML en texte brut d'origine.
L'exemple de code dans cette procédure déchiffre un élément XML à l'aide d'un certificat X.509 du magasin de certificats local du compte d'utilisateur en cours. L'exemple utilise la méthode DecryptDocument pour récupérer automatiquement le certificat X.509 et déchiffrer une clé de session stockée dans l'élément <EncryptedKey> de l'élément <EncryptedData>. La méthode DecryptDocument utilise ensuite automatiquement la clé de session pour déchiffrer l'élément XML.
Cet exemple est approprié lorsque plusieurs applications doivent partager les données chiffrées ou lorsqu'une application doit enregistrer les données chiffrées entre chacune de ses exécutions.
Pour déchiffrer un élément XML avec un certificat X.509
Créez un objet XmlDocument en chargeant un fichier XML à partir du disque. L'objet XmlDocument contient l'élément XML à déchiffrer.
Dim xmlDoc As New XmlDocument()
XmlDocument xmlDoc = new XmlDocument();
Créez un objet EncryptedXml en passant l'objet XmlDocument au constructeur.
Dim exml As New EncryptedXml(Doc)
EncryptedXml exml = new EncryptedXml(Doc);
Déchiffrez le document XML à l'aide de la méthode DecryptDocument.
exml.DecryptDocument()
exml.DecryptDocument();
Enregistrez l'objet XmlDocument.
xmlDoc.Save("test.xml")
xmlDoc.Save("test.xml");
Exemple
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();
}
}
Cet exemple suppose qu'un fichier nommé "test.xml" existe dans le même répertoire que le programme compilé. Il suppose également que "test.xml" contient un élément "creditcard". Vous pouvez placer le XML suivant dans un fichier appelé test.xml et l'utiliser avec cet exemple.
<root>
<creditcard>
<number>19834209</number>
<expiry>02/02/2002</expiry>
</creditcard>
</root>
Compilation du code
Pour compiler cet exemple, vous devez inclure une référence à System.Security.dll.
Incluez les espaces de noms suivants : System.Xml, System.Security.Cryptography et System.Security.Cryptography.Xml.
Sécurité
Le certificat X.509 utilisé dans cet exemple est utilisé uniquement à des fins de test. Les applications doivent utiliser un certificat X.509 généré par une autorité de confiance ou utiliser un certificat généré par Microsoft Windows Certificate Server.
Voir aussi
Tâches
Comment : chiffrer des éléments XML avec les certificats X.509
Référence
System.Security.Cryptography.Xml