Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

XmlDsigExcC14NTransform (Clase)

Representa la transformación de canonización C14N XML exclusiva para una firma digital tal como la define World Wide Web Consortium (W3C), sin comentarios.

Espacio de nombres:  System.Security.Cryptography.Xml
Ensamblado:  System.Security (en System.Security.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class XmlDsigExcC14NTransform : Transform

El tipo XmlDsigExcC14NTransform expone los siguientes miembros.

  NombreDescripción
Método públicoXmlDsigExcC14NTransform()Inicializa una nueva instancia de la clase XmlDsigExcC14NTransform.
Método públicoXmlDsigExcC14NTransform(Boolean)Inicializa una nueva instancia de la clase XmlDsigExcC14NTransform que especifica un valor que determina si se van a incluir comentarios.
Método públicoXmlDsigExcC14NTransform(String)Inicializa una nueva instancia de la clase XmlDsigExcC14NTransform que especifica una lista de prefijos de espacios de nombres que se canonizarán mediante el algoritmo de canonización estándar.
Método públicoXmlDsigExcC14NTransform(Boolean, String)Inicializa una nueva instancia de la clase XmlDsigExcC14NTransform que especifica si se van a incluir comentarios y especifica una lista de prefijos de espacios de nombres.
Arriba
  NombreDescripción
Propiedad públicaAlgorithmObtiene o establece el identificador uniforme de recursos (URI) que identifica el algoritmo ejecutado en la transformación actual. (Se hereda de Transform).
Propiedad públicaContextObtiene o establece un objeto XmlElement que representa el contexto del documento en el que se está ejecutando el objeto Transform actual. (Se hereda de Transform).
Propiedad públicaInclusiveNamespacesPrefixListObtiene o establece una cadena que contiene los prefijos de espacios de nombres que se van a canonizar mediante el algoritmo de canonización estándar.
Propiedad públicaInputTypesObtiene una matriz de tipos que son entradas válidas para el método LoadInput del objeto XmlDsigExcC14NTransform actual. (Invalida a Transform.InputTypes).
Propiedad públicaOutputTypesObtiene una matriz de tipos que son posibles resultados del método GetOutput del objeto XmlDsigExcC14NTransform actual. (Invalida a Transform.OutputTypes).
Propiedad públicaPropagatedNamespacesObtiene o establece un objeto Hashtable que contiene los espacios de nombres que se propagan en la firma. (Se hereda de Transform).
Propiedad públicaResolverEstablece el objeto XmlResolver actual. (Se hereda de Transform).
Arriba
  NombreDescripción
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetDigestedOutputDevuelve la síntesis asociada a un objeto XmlDsigExcC14NTransform. (Invalida a Transform.GetDigestedOutput(HashAlgorithm)).
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método protegidoGetInnerXmlDevuelve una representación XML de los parámetros de un objeto XmlDsigExcC14NTransform que son adecuados para incluirlos como subelementos de un elemento <Transform> XMLDSIG. (Invalida a Transform.GetInnerXml()).
Método públicoGetOutput()Devuelve los resultados del objeto XmlDsigExcC14NTransform actual. (Invalida a Transform.GetOutput()).
Método públicoGetOutput(Type)Devuelve los resultados del objeto XmlDsigExcC14NTransform actual como un objeto del tipo especificado. (Invalida a Transform.GetOutput(Type)).
Método públicoGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método públicoGetXmlDevuelve la representación XML del objeto Transform actual. (Se hereda de Transform).
Método públicoLoadInnerXmlAnaliza el objeto XmlNodeList especificado como contenido específico de la transformación de un elemento <Transform> y configura el estado interno del objeto XmlDsigExcC14NTransform actual para que coincida con el elemento <Transform>. (Invalida a Transform.LoadInnerXml(XmlNodeList)).
Método públicoLoadInputCuando se reemplaza en una clase derivada, carga la entrada especificada en el objeto XmlDsigExcC14NTransform actual. (Invalida a Transform.LoadInput(Object)).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

La clase XmlDsigExcC14NTransform representa la transformación de canonización C14N XML exclusiva sin comentarios. Esta clase es similar a la clase XmlDsigC14NTransform, que permite a un firmante crear una síntesis utilizando el formato canónico de un documento XML. Sin embargo, la clase XmlDsigExcC14NTransform excluye el contexto de antecesores de un subdocumento canónico.

Utilice la clase XmlDsigC14NTransform cuando necesite canonizar un subdocumento XML para que sea independiente de su contexto XML. Por ejemplo, las aplicaciones tales como los servicios Web que utilizan XML firmado dentro de protocolos de comunicación complejos a menudo necesitan canonizar el XML de esta manera. Tales aplicaciones a menudo contienen XML dentro de distintos elementos creados dinámicamente, lo que puede cambiar sustancialmente el documento y hacer que se produzcan errores en la comprobación de la firma XML. La clase XmlDsigExcC14NTransform resuelve este problema al excluir el contexto de antecesores del subdocumento canónico.

Normalmente, no se debe crear una instancia nueva de una clase de transformación de canonización. Para especificar una transformación de canonización, pase el identificador uniforme de recursos (URI) que describe una transformación a la propiedad CanonicalizationMethod, que es accesible desde la propiedad SignedInfo. Para adquirir una referencia a la transformación de canonización, utilice la propiedad CanonicalizationMethodObject, a la que se obtiene acceso desde la propiedad SignedInfo.

Solamente se requiere crear una instancia nueva de una clase de transformación de canonización cuando desea aplicar un algoritmo hash manualmente en un documento XML o utilizar su propio algoritmo de canonización.

El campo XmlDsigExcC14NWithCommentsTransformUrl define el identificador URI que describe la clase XmlDsigExcC14NWithCommentsTransform.

El campo XmlDsigExcC14NTransformUrl define el identificador URI que describe la clase XmlDsigExcC14NTransform.

Para obtener más información acerca de la transformación C14N exclusiva, vea la especificación de XMLDSIG, que está disponible en World Wide Web Consortium (W3C), en la dirección www.w3.org/TR/xmldsig-core/. El propio algoritmo de canonización se define en la especificación de XML canónico de W3C, disponible en www.w3.org/2001/10/xml-exc-c14n.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el valor de propiedad Resources siguiente: MayLeakOnAbort. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

En el ejemplo de código siguiente se muestra cómo firmar un documento XML con la clase XmlDsigExcC14NTransform utilizando una firma protegida.


//
// This example signs an XML file using an
// envelope signature. It then verifies the 
// signed XML.
//
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Xml;

public class SignVerifyEnvelope
{

    public static void Main(String[] args)
    {
        try
        {
            // Generate a signing key.
            RSACryptoServiceProvider Key = new RSACryptoServiceProvider();

            // Create an XML file to sign.
            CreateSomeXml("Example.xml");
            Console.WriteLine("New XML file created.");

            // Sign the XML that was just created and save it in a 
            // new file.
            SignXmlFile("Example.xml", "SignedExample.xml", Key);
            Console.WriteLine("XML file signed.");

            // Verify the signature of the signed XML.
            Console.WriteLine("Verifying signature...");
            bool result = VerifyXmlFile("SignedExample.xml");

            // Display the results of the signature verification to \
            // the console.
            if (result)
            {
                Console.WriteLine("The XML signature is valid.");
            }
            else
            {
                Console.WriteLine("The XML signature is not valid.");
            }

        }
        catch (CryptographicException e)
        {
            Console.WriteLine(e.Message);
        }
    }

    // Sign an XML file and save the signature in a new file.
    public static void SignXmlFile(string FileName, string SignedFileName, RSA Key)
    {
        // Create a new XML document.
        XmlDocument doc = new XmlDocument();

        // Format the document to ignore white spaces.
        doc.PreserveWhitespace = false;

        // Load the passed XML file using it's name.
        doc.Load(new XmlTextReader(FileName));

        // Create a SignedXml object.
        SignedXml signedXml = new SignedXml(doc);

        // Add the key to the SignedXml document. 
        signedXml.SigningKey = Key;

        // Specify a canonicalization method.
        signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;

        // Set the InclusiveNamespacesPrefixList property.        
        XmlDsigExcC14NTransform canMethod = (XmlDsigExcC14NTransform)signedXml.SignedInfo.CanonicalizationMethodObject;
        canMethod.InclusiveNamespacesPrefixList = "Sign";

        // Create a reference to be signed.
        Reference reference = new Reference();
        reference.Uri = "";

        // Add an enveloped transformation to the reference.
        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
        reference.AddTransform(env);

        // Add the reference to the SignedXml object.
        signedXml.AddReference(reference);


        // Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
        KeyInfo keyInfo = new KeyInfo();
        keyInfo.AddClause(new RSAKeyValue((RSA)Key));
        signedXml.KeyInfo = keyInfo;

        // Compute the signature.
        signedXml.ComputeSignature();

        // Get the XML representation of the signature and save
        // it to an XmlElement object.
        XmlElement xmlDigitalSignature = signedXml.GetXml();

        // Append the element to the XML document.
        doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true));


        if (doc.FirstChild is XmlDeclaration)
        {
            doc.RemoveChild(doc.FirstChild);
        }

        // Save the signed XML document to a file specified
        // using the passed string.
        XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false));
        doc.WriteTo(xmltw);
        xmltw.Close();
    }
    // Verify the signature of an XML file and return the result.
    public static Boolean VerifyXmlFile(String Name)
    {
        // Create a new XML document.
        XmlDocument xmlDocument = new XmlDocument();

        // Format using white spaces.
        xmlDocument.PreserveWhitespace = true;

        // Load the passed XML file into the document. 
        xmlDocument.Load(Name);

        // Create a new SignedXml object and pass it
        // the XML document class.
        SignedXml signedXml = new SignedXml(xmlDocument);

        // Find the "Signature" node and create a new
        // XmlNodeList object.
        XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");

        // Load the signature node.
        signedXml.LoadXml((XmlElement)nodeList[0]);

        // Check the signature and return the result.
        return signedXml.CheckSignature();

    }

    // Create example data to sign.
    public static void CreateSomeXml(string FileName)
    {
        // Create a new XmlDocument object.
        XmlDocument document = new XmlDocument();

        // Create a new XmlNode object.
        XmlNode node = document.CreateNode(XmlNodeType.Element, "", "MyXML", "Don't_Sign");

        // Append the node to the document.
        document.AppendChild(node);

        // Create a new XmlNode object.
        XmlNode subnode = document.CreateNode(XmlNodeType.Element, "", "TempElement", "Sign");

        // Add some text to the node.
        subnode.InnerText = "Here is some data to sign.";

        // Append the node to the document.
        document.DocumentElement.AppendChild(subnode);

        // Save the XML document to the file name specified.
        XmlTextWriter xmltw = new XmlTextWriter(FileName, new UTF8Encoding(false));
        document.WriteTo(xmltw);
        xmltw.Close();
    }
}


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Todos los miembros públicos static (Shared en Visual Basic) de este tipo son seguros para subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.