Postupy: Dešifrovat elementy XML s certifikáty X.509
K zašifrování a dešifrování elementu dokumentu XML lze použít třídy v oboru názvů System.Security.Cryptography.Xml. Šifrování XML představuje standardní způsob pro předávání nebo ukládaní zašifrovaných dat XML bez obav, že by byla data snadno čitelná. Další informace o standardu šifrování XML naleznete ve specifikaci šifrování XML na webových stránkách konsorcia W3C (World Wide Web Consortium) http://www.w3.org/TR/xmldsig-core/.
Příklad dešifruje element XML, který byl zašifrován pomocí metod popsaných v: Postupy: Šifrování XML elementů pomocí certifikátů X.509. Příklad nalezne element <EncryptedData>, dešifruje element a pak element nahradí původním nešifrovaným elementem XML.
Příklad kódu v této procedurě dešifruje element XML pomocí certifikátu X.509 z místního úložiště certifikátů aktuálního uživatele účtu. Příklad používá metodu DecryptDocument k automatickému načtení certifikátu X.509 a dešifrování klíče uloženého v relaci elementu <EncryptedKey> elementu <EncryptedData>. Metoda DecryptDocument pak automaticky používá klíč relace k dešifrování elementu XML.
Tento příklad je vhodný pro situace, kde je třeba sdílení zašifrovaných dat mezi více aplikacemi nebo pokud aplikace potřebuje uložit zašifrovaná data za běhu.
Dešifrování elementu XML pomocí certifikátu X.509
Vytvořte objekt XmlDocument načtením souboru XML z disku. Objekt XmlDocument obsahuje element XML určený k dešifrování.
Dim xmlDoc As New XmlDocument()
XmlDocument xmlDoc = new XmlDocument();
Vytvořte nový objekt EncryptedXml předáním objektu XmlDocument do konstruktoru.
Dim exml As New EncryptedXml(Doc)
EncryptedXml exml = new EncryptedXml(Doc);
Dešifrujte XML dokument pomocí metody DecryptDocument.
exml.DecryptDocument()
exml.DecryptDocument();
Uložte objekt XmlDocument.
xmlDoc.Save("test.xml")
xmlDoc.Save("test.xml");
Příklad
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();
}
}
Tento příklad předpokládá, že soubor s názvem "test.xml" existuje ve stejném adresáři jako Zkompilovaný program. Dále předpokládá, že "test.xml" obsahuje element "creditcard". Následující kód jazyka XML můžete umístit do souboru s názvem test.xml a použít jej v tomto příkladu.
<root>
<creditcard>
<number>19834209</number>
<expiry>02/02/2002</expiry>
</creditcard>
</root>
Probíhá kompilace kódu
Pro zkompilování tohoto příkladu je třeba přidat odkaz na System.Security.dll.
Je potřeba zahrnout následující obory názvů: System.Xml, System.Security.Cryptography a System.Security.Cryptography.Xml.
Zabezpečení
Certifikát X.509 použitý v tomto příkladu je pouze pro účely testování. Aplikace by měla používat certifikát X.509 generovaný důvěryhodnou certifikační autoritou nebo certifikát generovaný Microsoft Windows Certificate Server.
Viz také
Úkoly
Postupy: Šifrování XML elementů pomocí certifikátů X.509
Odkaz
System.Security.Cryptography.Xml