Udostępnij za pośrednictwem


Porady: odszyfrowywanie elementów XML za pomocą certyfikatów X.509

Klasy w System.Security.Cryptography.Xml przestrzeni nazw umożliwiają szyfrowanie i odszyfrowywanie elementu w dokumencie XML. Szyfrowanie XML to standardowy sposób wymiany lub przechowywania zaszyfrowanych danych XML bez obaw o łatwe odczytywanie danych. Aby uzyskać więcej informacji na temat standardu szyfrowania XML, zobacz specyfikację World Wide Web Consortium (W3C) dotyczącą szyfrowania XML znajdującego się w https://www.w3.org/TR/xmldsig-core/lokalizacji .

W tym przykładzie odszyfrowuje element XML, który został zaszyfrowany przy użyciu metod opisanych w temacie: Szyfrowanie elementów XML przy użyciu certyfikatów X.509. Znajduje element <EncryptedData> , odszyfrowuje element, a następnie zastępuje element oryginalnym elementem XML w postaci zwykłego tekstu.

Przykład kodu w tej procedurze odszyfrowuje element XML przy użyciu certyfikatu X.509 z lokalnego magazynu certyfikatów bieżącego konta użytkownika. W przykładzie użyto DecryptDocument metody , aby automatycznie pobrać certyfikat X.509 i odszyfrować klucz sesji przechowywany wEncryptedKey><elemekcie <EncryptedData> elementu. Następnie DecryptDocument metoda automatycznie używa klucza sesji do odszyfrowywania elementu XML.

Ten przykład jest odpowiedni w sytuacjach, w których wiele aplikacji musi udostępniać zaszyfrowane dane lub gdzie aplikacja musi zapisywać zaszyfrowane dane między godzinami jej uruchomienia.

Aby odszyfrować element XML z certyfikatem X.509

  1. XmlDocument Utwórz obiekt, ładując plik XML z dysku. Obiekt XmlDocument zawiera element XML do odszyfrowania.

    XmlDocument xmlDoc = new XmlDocument();
    
    Dim xmlDoc As New XmlDocument()
    
  2. Utwórz nowy EncryptedXml obiekt, przekazując XmlDocument obiekt do konstruktora.

    EncryptedXml exml = new EncryptedXml(Doc);
    
    Dim exml As New EncryptedXml(Doc)
    
  3. Odszyfruj DecryptDocument dokument XML przy użyciu metody .

    exml.DecryptDocument();
    
    exml.DecryptDocument()
    
  4. XmlDocument Zapisz obiekt.

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

Przykład

W tym przykładzie przyjęto założenie, że plik o nazwie "test.xml" istnieje w tym samym katalogu co skompilowany program. Przyjęto również założenie, że "test.xml" zawiera "creditcard" element . Poniższy kod XML można umieścić w pliku o nazwie test.xml i użyć go w tym przykładzie.

<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

Kompilowanie kodu

Zabezpieczenia platformy .NET

Certyfikat X.509 używany w tym przykładzie jest przeznaczony tylko do celów testowych. Aplikacje powinny używać certyfikatu X.509 wygenerowanego przez zaufany urząd certyfikacji.

Zobacz też