Página 1 de 1

No genera nada SignStringENC

Publicado: Vie Nov 29, 2013 8:03 pm
por MiguelC
buenas Tardes
Alguien me puede orientar sobre este problema que tengo, resulta que quiere generar el sello pero viendo con ustedes todos los ejemplos lo hice con chilkat y este es mi codigo
Dim privKey As New Chilkat.PrivateKey
If privKey.LoadPkcs8EncryptedFile(keycve, "1234567") = False Then
MsgBox(privKey.LastErrorText)
Exit Function
End If
Dim privkeyxml As String = privKey.GetXml()

Dim rsa As New Chilkat.Rsa
If rsa.ImportPrivateKey(privkeyxml) = False Then
MsgBox(rsa.LastErrorText)
Exit Function
End If
rsa.Charset = "utf-8"
rsa.EncodingMode = "base64"
rsa.LittleEndian = 0

Dim cert As New Chilkat.Cert
If cert.LoadFromFile(certfile) = False Then
MsgBox(cert.LastErrorText)
Exit Function
End If
Dim sellobase64 As String
sellobase64 = rsa.SignStringENC(strCadenaOriginal, "sha1")

pero el RSA.SIGNSTRINGENC no genera nada me da NOTHING, aque se debe, ya hice de todo, cambie sha-1, y algunas otraas cosas y nada , como que no se ejecuta ese metodo..

saludos
gracias por la ayuda

Re: No genera nada SignStringENC

Publicado: Vie Nov 29, 2013 8:53 pm
por mauricio
Para que puedas comparar, te recomiendo ampliamente aprender a obtener el sello con OpenSSL, ya al final puedes usar la librería que mencionas...

Si publicas el XML con el que estas trabajando, te podemos ayudar paso a paso a verificar tu sello...

Saludos

Re: No genera nada SignStringENC

Publicado: Sab Nov 30, 2013 9:17 am
por MiguelC
Que tal Mauricio
te mando el xml del que estoy trabajando y la cadena ya la cheque y la genera bien, parece como que la funcion no hace nada bien extraño, ya quita la referencia y la volvi agregar...

gracias

Re: No genera nada SignStringENC

Publicado: Sab Nov 30, 2013 10:31 am
por mauricio
El primer paso es obtener tu cadena original:

Código: Seleccionar todo

xsltproc cadena32.xslt fac_foro.xml
Mira si tienes "exactamente" la misma:

Código: Seleccionar todo

||3.2|2013-11-30T09:13:57|ingreso|PAGO EN UNA SOLA EXHIBICION|727.74|844.17|TARJETA DE CREDITO/DEBITO|HERMOSILLO|DCR1102231X6|DERMATOLOGICOS CR SA DE CV|BENITO JUAREZ #349 LOCAL 12 PLAZA DILA|BUGAMBILIAS|HERMOSILLO|SONORA|MEXICO|83140|BENITO JUAREZ 349|BUGAMBILIAS|SONORA|SONORA|MEXICO|83140|Régimen General de Ley Personas Morales|MEMJ590318MA0|JORGE ALBERTO MENDEZ MORENO|AV. TERRAZAS 20|SANTA LUCIA|HERMOSILLO|SONORA|MEXICO|83148|1.0000|PZA|ANSOLAR LOCION SPORT 65FPS 90ML|297.7700|297.7700|1.0000|PZA|URIAGE HYSEAC GEL 150ML|196.1200|196.1200|1.0000|PZA|HYSEAC A.I CMA 40ML|233.8400|233.8400|IVA|116.43|IVA|16.00|116.43||
Saludos

Re: No genera nada SignStringENC

Publicado: Sab Nov 30, 2013 4:21 pm
por MiguelC
Mauricio.
asi es, la tengo igualita, de hecho uso tambien la cadenaoriginal_3_2.xslt, yo creo que por ahi no va el error, la cadena ya la habia checado y si me habia quedado bien, como te comente, de hecho ya cambie la funcion puse esta ahora, que tome de aqui del foro pero no pasa la validacion con el validacfd.. tambien hice el sello con el openssl y si me da diferente ha este que genera con la funcion que te doy, estaba pensando si los decimales tienen que ver, yo pongo 4 decimales...

muchas gracias

Dim keyfile As String = "Claveprivada_DCR1102231X6.key"
Dim strSello As String = String.Empty
Dim passwordSeguro As System.Security.SecureString = New System.Security.SecureString
passwordSeguro.Clear()
For Each c As Char In pass.ToCharArray
passwordSeguro.AppendChar(c)
Next
Dim llavePrivadaBytes() As Byte = System.IO.File.ReadAllBytes(keyfile)
Dim rsaO As RSACryptoServiceProvider = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, passwordSeguro)
Dim hasher As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider
Dim bytesFirmados() As Byte = rsaO.SignData(System.Text.Encoding.UTF8.GetBytes(strCadenaOriginal), hasher)
strSello = Convert.ToBase64String(bytesFirmados)
Dim Root As XElement = XDocument.Load(nombredearchivo).Root
Root.@sello = strSello
Root.Save(nombredearchivo)

Re: No genera nada SignStringENC

Publicado: Sab Nov 30, 2013 5:25 pm
por MiguelC
Mauricio
Encontre este codigo:
y hice dos xml, y me dan diferente sello, a que se debe, me imagino que a la cadena, pero segun yo deben de estar identicas de hecho les mando la misma variable... no entiendo que esta pasando....
gracias, seguire buscandole...



Dim pathCadenaOriginal As String = "c:\OpenSSL-Win32\certificados\cadena.txt"
Dim pathLlaveFormatoPem As String = "c:\OpenSSL-Win32\certificados\llave.pem"
Dim pathSelloDigital As String = "C:\OpenSSL-Win32\certificados\00001000000301268365.cer"

Dim pathLlaveFormatoKey As String = "C:\OpenSSL-Win32\certificados\Claveprivada_DCR1102231X6.key"
'Escribe la cadena original en 'c:\cadena.original'.

File.WriteAllText(pathCadenaOriginal, strCadenaOriginal)
'Convierte la llave privada ('c:\llave.key') a formato PEM ('c:\llave.pem')
'con la cual es posible sellar la cadena digitalmente. Se requiere la
'contraseña de la llave privada la cual puede ser contenida en una variable o
'leída desde una base de datos etc.

Shell("c:\OpenSSL-Win32\bin\openssl pkcs8 -inform DER -in " & _
pathLlaveFormatoKey & " -out " & pathLlaveFormatoPem & _
" -passin pass:benito349", vbHide)
'Contando con la llave en formato PEM ('c:\llave.pem') se procede a generar
'el sello con la sigiente sentencia. Dicho sello quedará contenido en 'c:\sello.digital'.

Shell("cmd /c type " & pathCadenaOriginal &
" | c:\OpenSSL-Win32\bin\openssl dgst -sha1 -sign " & pathLlaveFormatoPem &
" | c:\OpenSSL-Win32\bin\openssl enc -base64 -A -out " & pathSelloDigital, vbHide)
'Se coloca el sello digital en una variable.
Dim resultado As String = File.ReadAllText(pathSelloDigital)
'Se eliminan archivos temporales.

Kill(pathCadenaOriginal)
Kill(pathLlaveFormatoPem)
'Kill(pathSelloDigital)

Dim Root As XElement = XDocument.Load(nombredearchivo).Root
Root.@sello = resultado
Root.Save(nombredearchivo)

Re: No genera nada SignStringENC

Publicado: Sab Nov 30, 2013 6:31 pm
por MiguelC
Mauricio
Ya lo solucione, con las dos rutinas quedo bien, resulta que me confunde con las llaves una de fiel y otra del certificado...

muchas gracias