Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03

Como crear el Sello con SHA256 en VBNET o C#

Y para empezar Que es una Factura Electronica? Como empiezo? Necesito Autorizacion? Que medios hay para Facturar Electronicamente? estos y todos los temas de iniciacion deberan estar aqui
luis_cfd
Mensajes: 97
Registrado: Mar Ene 04, 2011 10:24 am

Como crear el Sello con SHA256 en VBNET o C#

Mensajepor luis_cfd » Lun Abr 10, 2017 5:25 pm

Buena tardes colegas, ya le busqué y no dí, hay alguien aquí que genere el sello sha256 con vbnet o c#, sin usar openssl ?

Actualmente para yo generar el sello con sha1 uso :

Código: Seleccionar todo

donde :
RutaArchivoPFX, es la ruta de mi pfx que generé usando openssl
ContraseñaPFX , contraseña del archivo pfx
XMLstring, cadena con el xml
GetCadenaOriginalCo33, función que genera la cadena, aunque mal como ya dijo dado no lleva impuestos(el sat tiene mal el  xlst)

Dim objCert As New X509Certificates.X509Certificate2(RutaArchivoPFX, ContraseñaPFX)
Dim lRSA As RSACryptoServiceProvider = CType(objCert.PrivateKey, RSACryptoServiceProvider)
Dim SHA As New SHA1CryptoServiceProvider()
Dim Cadena As String = GetCadenaOriginalCo33(XMLstring)
Dim Sellobase64 As String = ""

Dim bytesFirmados As Byte() = lRSA.SignData(System.Text.Encoding.UTF8.GetBytes(Cadena), SHA)
Sellobase64 = Convert.ToBase64String(bytesFirmados)


Entonces creí que si movía la línea:

Código: Seleccionar todo

 Dim SHA As New SHA1CryptoServiceProvider()

por

Código: Seleccionar todo

 Dim SHA As New SHA256CryptoServiceProvider()


Ya iba a quedar y no, me marca valor no válido, alguien que quiera compartir su solución ?, gracias y saludos

robsgax
Mensajes: 1
Registrado: Lun Abr 10, 2017 7:18 pm

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor robsgax » Lun Abr 10, 2017 7:24 pm

este es el que uso yo, el del SHA256CryptoServiceProvider no funciona en librerias .net por un bug

Código: Seleccionar todo

                Dim privateCert As New X509Certificate2(archivoPFX, clavePFX, X509KeyStorageFlags.Exportable)
                Dim privateKey As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)
                Dim privateKey1 As New RSACryptoServiceProvider()
                privateKey1.ImportParameters(privateKey.ExportParameters(True))

                Dim signature As Byte() = privateKey1.SignData(stringCadenaOriginal, "SHA256")

                dim sello256 as string = Convert.ToBase64String(signature)

      para verificar el sello
                Dim isValid As Boolean = privateKey1.VerifyData(stringCadenaOriginal, "SHA256", signature)       

luis_cfd
Mensajes: 97
Registrado: Mar Ene 04, 2011 10:24 am

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor luis_cfd » Mar Abr 11, 2017 4:33 pm

Gracias por compartir amigo robsgax, tu código funcionó excelente !
Sólo moví una línea :

Código: Seleccionar todo

Dim privateKey As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)

Por esta

Código: Seleccionar todo

Dim privateKey As RSACryptoServiceProvider = DirectCast(privateCert.PrivateKey, RSACryptoServiceProvider)


Mencionar también que la variable stringCadenaOriginal no es un string, sino un arreglo de bytes que probablemente se llenó:

Código: Seleccionar todo

Dim stringCadenaOriginal() As Byte = System.Text.Encoding.UTF8.GetBytes(CadenaOriginalEsteSiEsString)


Gracias y saludos

gilberto
Mensajes: 67
Registrado: Jue Mar 23, 2017 11:49 pm

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor gilberto » Dom Abr 16, 2017 11:32 pm

Hola Sr. del Foro
Tengo problemas para convertir el sello en 256
Copio el código que esta en esta sección pero omito esta linea:
privateKey1.ImportParameters(privateKey.ExportParameters(True))
Por que me da error.
Mas sin embargo la variable para verificar el sello me manda True.
mando a timbrar el xml ya armado.
me regresa este error.
El resultado de la digestión debe ser igual al resultado dela desencriptacion del sello.
Pueden ayudarme por favor.

Avatar de Usuario
Dado
Mensajes: 15838
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor Dado » Lun Abr 17, 2017 9:03 am

@gilberto

Donde seguramente tienes el error es en la creacion de la cadena original, compara tu cadena contra la que genera el validador ValidaCFD, deben coincidir exactamente
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

gilberto
Mensajes: 67
Registrado: Jue Mar 23, 2017 11:49 pm

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor gilberto » Lun Abr 17, 2017 10:42 pm

Ya lo verifique.
No es igual.
Baje otro xslt y este ya me realizo la cadena igual.
ya pude timbrar la versión 3.3
Gracias.
donde lo puedo validar?

rsb_serrato
Mensajes: 29
Registrado: Vie Nov 11, 2016 9:27 am

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor rsb_serrato » Mar Abr 18, 2017 10:48 am

Justamente ayer también estaba validando que saliera bien el sello. Lo hice con openssl como se indica en viejos posts del foro (este foro es una maravilla :D ).

Tomas una cadena original de prueba y checas que salga el mismo sello con openssl.

Con este sacas el archivo .pem

Código: Seleccionar todo

openssl pkcs8 -inform DER -in AAA010101AAA.key -out AAA010101AAA.pem


Y con este sale el sello

Código: Seleccionar todo

openssl dgst -sha256 -sign AAA010101AAA.pem cadenaoriginal.txt | openssl enc -base64 -A > sello.txt


Ten cuidado con que el archivo cadenaoriginal.txt esté en UTF8

ralosoft
Mensajes: 2
Registrado: Jue Jul 17, 2014 9:32 pm

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor ralosoft » Mar Ago 29, 2017 12:04 pm

LES COMENTO QUE YA CORRI EL CODIGO Y ME FUNCIONO CORRECTAMENTE, Y QUEDO ASI

Código: Seleccionar todo

 Private Function GenerarSello() As String

        Dim privateCert As New X509Certificate2(DirPfx, PASSWORD, X509KeyStorageFlags.Exportable)
        Dim privateKey As RSACryptoServiceProvider = DirectCast(privateCert.PrivateKey, RSACryptoServiceProvider)
        Dim privateKey1 As New RSACryptoServiceProvider()
        privateKey1.ImportParameters(privateKey.ExportParameters(True))
        Dim stringCadenaOriginal() As Byte = System.Text.Encoding.UTF8.GetBytes(GetCadenaOriginal(m_xmlDOM.InnerXml))
        Dim signature As Byte() = privateKey1.SignData(stringCadenaOriginal, "SHA256")
        Dim sello256 As String = Convert.ToBase64String(signature)
        'para verificar el sello
        Dim isValid As Boolean = privateKey1.VerifyData(stringCadenaOriginal, "SHA256", signature)
        GenerarSello = sello256
       

    End Function


DE IGUAL MANERA DEBEN DE UTILIZAR EL XSLT QUE PESA 18KB

shakira
Mensajes: 76
Registrado: Lun Feb 14, 2011 2:15 pm

Re: Como crear el Sello con SHA256 en VBNET o C#

Mensajepor shakira » Mié Ago 30, 2017 12:01 pm

Buenas tardes.

ralosoft ¿podrías compartir por qué dejaste de usar chilkat para generar tu sello?

Gracias.


Volver a “Iniciando con la Factura Electronica”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados