* Clase helper para codificar y decodificar en formato Base64
*
* Autor: Victor Espina
*
* Adaptado a partir del codigo publicado por Anatoliy Mogylevets
* en FoxWikis: http://fox.wikis.com/wc.dll?Wiki~VfpBase64
*
DEFINE CLASS base64Helper AS Custom
*
*-- COnstructor
PROCEDURE Init
*
DECLARE INTEGER CryptBinaryToString IN Crypt32;
STRING @pbBinary, LONG cbBinary, LONG dwFlags,;
STRING @pszString, LONG @pcchString
DECLARE INTEGER CryptStringToBinary IN crypt32;
STRING @pszString, LONG cchString, LONG dwFlags,;
STRING @pbBinary, LONG @pcbBinary,;
LONG pdwSkip, LONG pdwFlags
*
ENDPROC
* encodeString
* Toma un string y lo convierte en base64
*
PROCEDURE encodeString(pcString)
LOCAL nFlags, nBufsize, cDst
nFlags=1 && base64
nBufsize=0
CryptBinaryToString(@pcString, LEN(pcString),m.nFlags, NULL, @nBufsize)
cDst = REPLICATE(CHR(0), m.nBufsize)
IF CryptBinaryToString(@pcString, LEN(pcString), m.nFlags,@cDst, @nBufsize) = 0
RETURN ""
ENDIF
RETURN cDst
ENDPROC
* decodeString
* Toma una cadena en BAse64 y devuelve la cadena original
*
FUNCTION decodeString(pcB64)
LOCAL nFlags, nBufsize, cDst
nFlags=1 && base64
nBufsize=0
CryptStringToBinary(@pcB64, LEN(m.pcB64),nFlags, NULL, @nBufsize, 0,0)
cDst = REPLICATE(CHR(0), m.nBufsize)
IF CryptStringToBinary(@pcB64, LEN(m.pcB64),nFlags, @cDst, @nBufsize, 0,0) = 0
RETURN ""
ENDIF
RETURN m.cDst
ENDPROC
* encodeFile
* Toma un archivo y lo codifica en base64
*
PROCEDURE encodeFile(pcFile)
IF NOT FILE(pcFile)
RETURN ""
ENDIF
RETURN THIS.encodeString(FILETOSTR(pcFile))
ENDPROC
* decodeFile
* Toma una cadena base64, la decodifica y crea un archivo con el contenido
*
PROCEDURE decodeFile(pcB64, pcFile)
LOCAL cBuff
cBuff = THIS.decodeString(pcB64)
STRTOFILE(cBuff, pcFile)
ENDPROC
*
ENDDEFINE