Sdílet prostřednictvím


Postupy: Dešifrování XML elementů pomocí certifikátů X.509

Třídy v System.Security.Cryptography.Xml oboru názvů můžete použít k šifrování a dešifrování elementu v dokumentu XML. Šifrování XML je standardní způsob výměny nebo ukládání šifrovaných dat XML, aniž byste se museli starat o snadno čitelná data. Další informace o standardu šifrování XML naleznete ve specifikaci W3C (World Wide Web Consortium) pro šifrování XML umístěné na adrese https://www.w3.org/TR/xmldsig-core/.

Tento příklad dešifruje element XML, který byl zašifrován pomocí metod popsaných v tématu: Postupy: Šifrování elementů XML pomocí certifikátů X.509. Najde <EncryptedData> prvek, dešifruje element a pak nahradí element původním elementem XML ve formátu prostého textu.

Příklad kódu v tomto postupu dešifruje element XML pomocí certifikátu X.509 z místního úložiště certifikátů aktuálního uživatelského účtu. Příklad používá metodu DecryptDocument k automatickému načtení certifikátu X.509 a dešifrování klíče relace uloženéhoEncryptedKey<> v prvku <EncryptedData> prvku. Metoda DecryptDocument pak automaticky použije klíč relace k dešifrování elementu XML.

Tento příklad je vhodný pro situace, kdy více aplikací potřebuje sdílet šifrovaná data nebo kde aplikace potřebuje uložit šifrovaná data mezi časy spuštění.

Dešifrování elementu XML pomocí certifikátu X.509

  1. Vytvořte XmlDocument objekt načtením souboru XML z disku. Objekt XmlDocument obsahuje element XML k dešifrování.

    XmlDocument xmlDoc = new XmlDocument();
    
    Dim xmlDoc As New XmlDocument()
    
  2. Vytvořte nový EncryptedXml objekt předáním XmlDocument objektu konstruktoru.

    EncryptedXml exml = new EncryptedXml(Doc);
    
    Dim exml As New EncryptedXml(Doc)
    
  3. Dešifrujte dokument XML pomocí DecryptDocument metody.

    exml.DecryptDocument();
    
    exml.DecryptDocument()
    
  4. XmlDocument Uložte objekt.

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

Příklad

Tento příklad předpokládá, že soubor s názvem "test.xml" existuje ve stejném adresáři jako zkompilovaný program. Předpokládá se také, že "test.xml" obsahuje "creditcard" prvek. Následující kód XML můžete umístit do souboru volaný test.xml a použít ho v tomto příkladu.

<root>  
    <creditcard>  
        <number>19834209</number>  
        <expiry>02/02/2002</expiry>  
    </creditcard>  
</root>  
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();
    }
}
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.  
        ArgumentNullException.ThrowIfNull(Doc)

        ' Create a new EncryptedXml object.
        Dim exml As New EncryptedXml(Doc)
        ' Decrypt the XML document.
        exml.DecryptDocument()
    End Sub
End Module

Probíhá kompilace kódu

Zabezpečení .NET

Certifikát X.509 použitý v tomto příkladu je určený pouze pro testovací účely. Aplikace by měly používat certifikát X.509 vygenerovaný důvěryhodnou certifikační autoritou.

Viz také