Imagen

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


CARTA PORTE V3.1

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
Cerrado
luis_cfd
Mensajes: 97
Registrado: Mar Ene 04, 2011 10:24 am

Como crear el Sello con SHA256 en VBNET o C#

Mensaje por luis_cfd »

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#

Mensaje por robsgax »

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#

Mensaje por luis_cfd »

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#

Mensaje por gilberto »

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: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

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

Mensaje por Dado »

@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#

Mensaje por gilberto »

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#

Mensaje por rsb_serrato »

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#

Mensaje por ralosoft »

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#

Mensaje por shakira »

Buenas tardes.

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

Gracias.
Cerrado