Página 1 de 1
Como crear el Sello con SHA256 en VBNET o C#
Publicado: Lun Abr 10, 2017 5:25 pm
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:
por
Ya iba a quedar y no, me marca valor no válido, alguien que quiera compartir su solución ?, gracias y saludos
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Lun Abr 10, 2017 7:24 pm
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)
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Mar Abr 11, 2017 4:33 pm
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
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Dom Abr 16, 2017 11:32 pm
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.
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Lun Abr 17, 2017 9:03 am
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
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Lun Abr 17, 2017 10:42 pm
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?
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Mar Abr 18, 2017 10:48 am
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

).
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
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Mar Ago 29, 2017 12:04 pm
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
Re: Como crear el Sello con SHA256 en VBNET o C#
Publicado: Mié Ago 30, 2017 12:01 pm
por shakira
Buenas tardes.
ralosoft ¿podrías compartir por qué dejaste de usar chilkat para generar tu sello?
Gracias.