Página 1 de 1

Como crear el Sello con SHA256 en Visual Foxpro

Publicado: Mié Jun 21, 2017 7:42 pm
por ortega29
Yo tengo una rutina pero al parecer no encripta correctamente la cadena original

loRsa.LittleEndian = 0
lorsa.Charset = "utf-8"
loRsa.EncodingMode = "base64"

strSello = loRsa.SignStringENC(strOriginal,"SHA-2") &&tambien funcino con SHA-256

N = loCert.SerialNumber
noCertificado = SubStr(N,02,1)+SubStr(N,04,1)+SubStr(N,06,1)+SubStr(N,08,1)+SubStr(N,10,1)+;
SubStr(N,12,1)+SubStr(N,14,1)+SubStr(N,16,1)+SubStr(N,18,1)+SubStr(N,20,1)+;
SubStr(N,22,1)+SubStr(N,24,1)+SubStr(N,26,1)+SubStr(N,28,1)+SubStr(N,30,1)+;
SubStr(N,32,1)+SubStr(N,34,1)+SubStr(N,36,1)+SubStr(N,38,1)+SubStr(N,40,1)+;
SubStr(N,42,1)+SubStr(N,44,1)+SubStr(N,46,1)+SubStr(N,48,1)+SubStr(N,50,1)

Certificado = SubStr(loCert.GetEncoded(), 1, Len(loCert.GetEncoded()) - 2)

quien puede tener otra rutina diferente, utilizo ChiltKat

Re: Como crear el Sello con SHA256 en Visual Foxpro

Publicado: Mar Jul 04, 2017 5:11 pm
por Halcon Divino
Aquí la Tienes
Rutina para sellar la cadena original en VFP usando el Chidkat para los CFDI 3.3

Código: Seleccionar todo

Function SelloDigital 
Parameters ArchivoCer,ArchivoKey,PasswordKey,strCadenaOriginal

Local loPkey
Local lnSuccess
Local lcPkeyXml
Local loRsa
Local lcFileData
Local lcBase64Sig
Local loCert 

If not File(ArchivoCer )
   Return "ERROR: No existe el archivo Certificado " +ArchivoCer
EndIf
   
If not File(ArchivoKey )
   Return "ERROR: No existe el archivo Key " +ArchivoCer
EndIf

If Empty(PasswordKey)
   Return "ERROR: Contraseña de llave pribada vacia" 
EndIf

*  Objetos 
loPkey = CreateObject('Chilkat.PrivateKey')
loRsa  = CreateObject('Chilkat.Rsa')
loCert = CreateObject('Chilkat.Cert')

*  Load the Certificado 
loCert.LoadFromFile(ArchivoCer)

*  Load the private key from an RSA PEM file:     * loPkey.LoadPemFile("myKey.pem")
lnSuccess = loPkey.LoadPkcs8EncryptedFile(ArchivoKey, PasswordKey)

IF (lnSuccess <> 1) THEN
   return "Error No se pudo abrir el archivo Key: " + ArchivoKey + " con el password que tiene el sistema registrado"
ENDIF

*  Get the private key in XML format:
lcPkeyXml = loPkey.GetXml()

*  Desbloquea componente
 lnSuccess = loRsa.UnlockComponent("RSAT34MB34N_7F1CD986683M")

* Error
IF (lnSuccess <> 1) THEN
   return "Error No se pudo desbloquer el componente ChilKat"
ENDIF

*  Import the private key into the RSA component:
lnSuccess = loRsa.ImportPrivateKey(lcPkeyXml)

*  OpenSSL uses BigEndian byte ordering:
loRsa.LittleEndian = 0
lorsa.Charset      = "utf-8"
loRsa.EncodingMode = "base64"

* Creates an RSA digital signature by hashing strToBeHashed and then signing the hash.
* The hash algorithm is specified by hashAlgorithm, which may be
* "SHA-1", "MD5", "MD2", "SHA-256", "SHA-384", or "SHA-512".
* The recommended hash algorithm is "SHA-1".
* The digital signature is returned as an encoded string, 
* where the encoding is specified by the EncodingMode property. 
mSelloDigital      = loRsa.SignStringENC(strCadenaOriginal,"SHA-256")

If EMPTY(mSelloDigital)
   Return "Error No se pudo obtenre el sello digital "
ENDIF

N                  = loCert.SerialNumber
mnoCertificado     = SubStr(N,02,1)+SubStr(N,04,1)+SubStr(N,06,1)+SubStr(N,08,1)+SubStr(N,10,1)+;
                     SubStr(N,12,1)+SubStr(N,14,1)+SubStr(N,16,1)+SubStr(N,18,1)+SubStr(N,20,1)+;
                     SubStr(N,22,1)+SubStr(N,24,1)+SubStr(N,26,1)+SubStr(N,28,1)+SubStr(N,30,1)+;
                     SubStr(N,32,1)+SubStr(N,34,1)+SubStr(N,36,1)+SubStr(N,38,1)+SubStr(N,40,1)+;
                     SubStr(N,42,1)+SubStr(N,44,1)+SubStr(N,46,1)+SubStr(N,48,1)+SubStr(N,50,1) 
                     
mCertificado        = SubStr(loCert.GetEncoded(), 1, Len(loCert.GetEncoded()) - 2)

If empty(mCertificado) 
   Return "Error No se pudo obtener el certificado"
EndIf

If empty(mNoCertificado) 
   Return "Error No se pudo obtener el Número del certificado"
EndIf

Return "OK"

Re: Como crear el Sello con SHA256 en Visual Foxpro

Publicado: Jue Nov 16, 2017 4:21 am
por riftop
Hola Halcon Divino, estoy programando en VFP9 y lo hago mediante OpenSSL y me da error de sello, ¿Alguna sugerencia? Utilizo tu metodo que alguna vez publicaste.

Re: Como crear el Sello con SHA256 en Visual Foxpro

Publicado: Jue Nov 16, 2017 8:18 am
por Dado
Revisa la libreria DLL de aqui, esa DLL sella y timbra en un solo paso tus comprobantes y te ahorra muchisimo tiempo de programacion