Txt a MD5

329 views
Skip to first unread message

Norberto Mario Alvarez

unread,
Feb 22, 2019, 7:07:48 AM2/22/19
to Comunidad de Visual Foxpro en Español
Hola Lista, queria preguntar si hay posibilidad de pasar un txt a MD5 desde VFP. Desde ya muchas gracias por vuestra atención

Norberto Alvarez

Irwin Rodriguez

unread,
Feb 22, 2019, 8:05:10 AM2/22/19
to publice...@googlegroups.com
De forma nativa no, en su lugar usa vfpencryption


y para convertir tu txt solo haces un FILETOSTR("c:\path\to\my\file")

Saludos...!!!

El vie., 22 feb. 2019 a las 13:07, Norberto Mario Alvarez (<norberto.ma...@gmail.com>) escribió:
Hola Lista, queria preguntar si hay posibilidad de pasar un txt a MD5 desde VFP. Desde ya muchas gracias por vuestra atención

Norberto Alvarez


--
Irwin Rodríguez
Analista Programador

+593 0994903424
Latacunga - Ecuador
"Un equipo solo son piezas que intercambias hasta que terminas el trabajo, es eficiente, funciona."

James S

unread,
Feb 22, 2019, 8:56:02 PM2/22/19
to Comunidad de Visual Foxpro en Español

Fernando Mora

unread,
Feb 22, 2019, 11:30:20 PM2/22/19
to Comunidad de Visual Foxpro en Español
Desde Fox, usa las apis de windows, BCryp. Puedes convertir a todos los algoritmos de encriptación que existen, MD2, MD4, MD5, SHA1, SHA256, SHA512, etc. Te paso el código, solo le cambias el parámetro lcAlgoritmo con el formato que desees.


*------------------------- CNG 
DECLARE LONG BCryptOpenAlgorithmProvider IN BCrypt; 
LONG @phAlgorithm,;
STRING pszAlgId,; 
STRING pszImplementation,;
LONG dwFlags

DECLARE LONG BCryptGetProperty IN BCrypt;
LONG hObject,;
STRING pszProperty,;
LONG @pbOutput,;
LONG cbOutput,;
LONG @pcbResult,;
LONG dwFlags

DECLARE LONG BCryptCreateHash IN BCrypt; 
LONG hAlgorithm,;
LONG @phHash,;
STRING @pbHashObject,;
LONG cbHashObject,;
STRING pbSecret,;
LONG cbSecret,; 
LONG dwFlags

DECLARE LONG BCryptHashData IN BCrypt; 
LONG hHash,;
STRING pbInput,;
LONG cbInput,;
LONG dwFlags 

DECLARE LONG BCryptFinishHash IN BCrypt; 
LONG hHash,;
STRING @pbOutput,;
LONG cbOutput,;
LONG dwFlags 

DECLARE LONG BCryptDestroyHash IN BCrypt; 
LONG hHash 

DECLARE LONG BCryptDestroyKey IN BCrypt; 
LONG hKey

DECLARE LONG BCryptCloseAlgorithmProvider IN BCrypt; 
LONG hAlgorithm,;
LONG dwFlags

*------------------------ Kernel32
DECLARE INTEGER GetLastError IN Kernel32

DECLARE LONG FormatMessage IN Kernel32;
  LONG dwFlags,;
  STRING @lpSource,;
  LONG dwMessageId,;
  LONG dwLanguageId,;
  STRING @lpBuffer,;
  LONG nSize,;
  LONG Arguments

*------------------------ Constantes
#DEFINE FORMAT_MESSAGE_FROM_SYSTEM 0x00001000

*----------------------- Main
lcAlgoritmo = "MD5"
tcDataSign = GetDigestValue("Texto que deseo encriptar", lcAlgoritmo)
?
? "Digest Value MD5: " + TRANSFORM(tcDataSign)
?

*-------------------------- Región de Procedures
PROCEDURE GetDigestValue(tcData, tcHashAlg)
lnAlg = 0
nRespBCOAP = BCryptOpenAlgorithmProvider(@lnAlg, STRCONV(tcHashAlg,5)+CHR(0), NULL, 0)
IF nRespBCOAP<>0
MESSAGEBOX("ERROR AL ABRIR ALGORITMO")
RETURN ""
ENDIF
*----- Determinamos cuántos bytes necesitamos para almacenar el objeto hash
lnSizeObj = 0 
lnData = 0 
nRespNCGP = BCryptGetProperty(lnAlg, STRCONV("ObjectLength",5)+CHR(0), @lnSizeObj, 4, @lnData, 0)
IF nRespNCGP<>0
MESSAGEBOX("ERROR AL OBTENER PROPIEDAD DE ENCRIPTACION")
RETURN ""
ENDIF
*----- Determinamos la longitud de valor hash 
lnSizeHash = 0 
nRespNCGP = BCryptGetProperty(lnAlg, STRCONV("HashDigestLength",5)+CHR(0), @lnSizeHash, 4, @lnData, 0)
IF nRespNCGP<>0
MESSAGEBOX("ERROR AL OBTENER PROPIEDAD DE ENCRIPTACION")
RETURN ""
ENDIF
*----- Creamos un objeto Hash
LOCAL lnHash, lcHashObj 
lnHash = 0 
lcHashObj = SPACE(lnSizeObj) 
nRespBCCH = BCryptCreateHash(lnAlg, @lnHash, @lcHashObj, lnSizeObj, NULL, 0, 0)
IF nRespBCCH<>0
MESSAGEBOX("ERROR AL CREAR OBJETO HASH")
RETURN ""
ENDIF
*----- Para crear el valor hash agregamos datos al objeto hash. 
nLenData = LEN(tcData)
nRespBCHD = BCryptHashData(lnHash, tcData, nLenData, 0)
IF nRespBCHD<>0
nRespBCHD = BCryptHashData(lnHash, tcData, nLenData, 0)
IF nRespBCHD<>0
=GetMensajeError(nRespBCHD)
RETURN ""
ENDIF
ENDIF
*----- Finalizamos, El algoritmo ahora calcula el valor de hash y lo devuelve. 
lcHash = SPACE(lnSizeHash) 
=BCryptFinishHash(lnHash, @lcHash, lnSizeHash, 0)
IF lnAlg<>0
BCryptCloseAlgorithmProvider(lnAlg, 0) 
ENDIF 
IF lnHash<>0 
BCryptDestroyHash(lnHash) 
ENDIF
lcHash15 = STRCONV(lcHash,13) && HexBinary ~ 16 format 
RETURN lcHash15
ENDPROC

PROCEDURE GetMensajeError(tcNumError)
IF VARTYPE(tcNumError)=="N"
lnErrorCode = tcNumError
ELSE
lnErrorCode = GetLastError()
ENDIF
lpBuffer = SPACE(128)
=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 'WINERROR.H', lnErrorCode, 0, @lpBuffer, 128 , 0)
=MESSAGEBOX(lpBuffer, 16, "Error: " + TRANSFORM(lnErrorCode,"@0"))
ENDPROC






El viernes, 22 de febrero de 2019, 7:07:48 (UTC-5), Norberto Mario Alvarez escribió:

Norberto Mario Alvarez

unread,
Feb 28, 2019, 8:20:24 AM2/28/19
to Comunidad de Visual Foxpro en Español
Muchas Gracias a todos por sus respuestas!!!!!!!!!!!!

Norberto Alvarez
Reply all
Reply to author
Forward
0 new messages