none
Firmar xml con SHA256 RRS feed

  • Debate general

  • Hola, estoy intentando firmar un xml con un certificado digital.

    Con SHA1 lo consigo, pero no consigo que me funcione con SHA256.
    He sacado algunos codigos por internet pero no consigo que me funcionen, o no consigo entender algunas partes...

    Todo esto es para emitir unas facturas electronicas y hacienda las pide firmadas con un certificado digital.

    ¿Alguien ha echo algo parecido y puede ayudarme??

    martes, 23 de enero de 2018 12:05

Todas las respuestas

  • Hola, puedes indicarnos qué no te funciona? Algún ejemplo de código? 

    Gracias


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 24 de enero de 2018 10:59
  •   Public Sub SignXmlFile(FileName As String, SignedFileName As String, clave As RSA)
            ' Crea un nuevo documento XML.
            Dim doc As New XmlDocument
            ' Cargue el archivo XML pasado usando su nombre.
            doc.Load(New XmlTextReader(FileName))
            ' Crea un objeto SignedXml.
            Dim signedXml As SignedXml = New SignedXml(doc)
            ' Agregue la clave al documento SignedXml.
            signedXml.SigningKey = clave
            signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
            ' Crea una referencia para ser firmado.
            Dim reference As New Reference
            reference.Uri = ""
            ' Agrega una transformación envolvente a la referencia.
            Reference.AddTransform(New XmlDsigEnvelopedSignatureTransform())
            Reference.AddTransform(New XmlDsigExcC14NTransform())
            Reference.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256"
            ' Agrega la referencia al objeto SignedXml.
            signedXml.AddReference(reference)
            ' Calcula la firma.
            signedXml.ComputeSignature()
            ' Obtener la representación XML de la firma y guardar
            ' a un objeto XmlElement.
            Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()
    
            ' Añade el elemento al documento XML.
            doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, True))
    
            ' Guarda el documento XML firmado en un archivo especificado
            ' usando la cadena pasada.
            Dim xmltw As XmlTextWriter = New XmlTextWriter(SignedFileName, New UTF8Encoding(False))
            doc.WriteTo(xmltw)
            xmltw.Close()
        End Sub

    El error lo da aquí:

    ' Calcula la firma.
    signedXml.ComputeSignature()
    Excepción no controlada del tipo 'System.Security.Cryptography.CryptographicException' en mscorlib.dll

    Información adicional: Algoritmo especificado no es válido.

    No consigo saber que puede ser...

    miércoles, 24 de enero de 2018 17:06