Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Классы можно использовать в пространстве имен System.Security.Cryptography.Xml для шифрования и расшифровки элемента XML-документа. Шифрование XML-данных — это стандартный способ обмена зашифрованными XML-данными и их хранения, позволяющий не беспокоиться о том, что эти данные могут быть прочитаны. Дополнительные сведения о стандарте шифрования XML см. в спецификации консорциума W3C для XML-шифрования, расположенного по адресу https://www.w3.org/TR/xmldsig-core/.
В этом примере расшифровывается XML-элемент, зашифрованный с помощью методов, описанных в разделе "Практическое руководство. Шифрование XML-элементов с помощью сертификатов X.509". Он находит <EncryptedData
> элемент, расшифровывает элемент, а затем заменяет элемент исходным XML-элементом обычного текста.
В примере кода этой процедуры выполняется расшифровка XML-элемента при помощи сертификата X.509 из локального хранилища сертификатов текущей учетной записи пользователя. В примере используется DecryptDocument метод для автоматического извлечения сертификата X.509 и расшифровки ключа сеанса, хранящегося вEncryptedKey
><элементе <EncryptedData
> элемента. После этого метод DecryptDocument автоматически использует сеансовый ключ для расшифровки XML-элемента.
Этот пример подходит в ситуациях, когда нескольким приложениям нужен общий доступ к зашифрованным данным или когда приложению требуется сохранять зашифрованные данные между запусками.
Расшифровка XML-элемента с использованием сертификата X.509
Создайте объект XmlDocument, загрузив XML-файл с диска. Объект XmlDocument содержит XML-элемент для расшифровки.
XmlDocument xmlDoc = new XmlDocument();
Dim xmlDoc As New XmlDocument()
Создайте новый объект EncryptedXml, передав объект XmlDocument в конструктор.
EncryptedXml exml = new EncryptedXml(Doc);
Dim exml As New EncryptedXml(Doc)
Выполните расшифровку XML-документа при помощи метода DecryptDocument.
exml.DecryptDocument();
exml.DecryptDocument()
Сохраните объект XmlDocument.
xmlDoc.Save("test.xml");
xmlDoc.Save("test.xml")
Пример
В этом примере предполагается, что файл с именем "test.xml"
существует в том же каталоге, что и скомпилированная программа. Кроме того, предполагается, что "test.xml"
содержит элемент "creditcard"
. Можно поместить следующий XML-код в файл с именем test.xml
и использовать его вместе с данным примером.
<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
Компиляция кода
В проекте, который предназначен для платформа .NET Framework, добавьте ссылку на
System.Security.dll
.В проекте, который предназначен для .NET Core или .NET 5, установите пакет NuGet System.Security.Cryptography.Xml.
Включите следующие пространства имен: System.Xml, System.Security.Cryptography и System.Security.Cryptography.Xml.
Безопасность .NET
Используемый в этом примере сертификат X.509 предназначен исключительно для тестирования. Приложения должны использовать сертификат X.509, созданный доверенным центром сертификации.