Juan Pablo,
> Comprobado, de hecho posteriormente lo guardo en un archivo de texto,
> incluso lo desencripto y lo guardo en otro archivo de texto y funciona
> bien, el error de lectura de memoria me lo da al cerrar la aplicacion, y
> el GPF lo da de manera eventual despues de guardar los dos archivos
> mencionados y antes de abrir mi formulario principal (repito este ultimo
> es eventualmente)
Quizás el problema no esté en Encrypt() sino en el tratamiento que le estés
dando a la cadena posteriormente; ten en cuenta que la cadena encriptada
puede contener caracteres nulos, y no todas las funciones de [x]Harbour,
Xailer y/o el API de windows son capaces de tratarla.
Prueba a asignarle a la variable resultante un valor "normal" después de
encriptarla. P.ej:
cSt:=encrypt(FreadStr(nHa,nLen),"miclave")
cSt := "Cadena encriptada"
Obviamente, eso no es lo que quieres, pero puede servir para determinar si
el problema es realmente de la función Encrypt() o es de su tratamiento
posterior.
Por cierto, te aconsejo que si vas a guardar la cadena encriptada en algún
sitio la conviertas a hexadecimal usando la función StringToHex(). P.ej.:
cSt:=FreadStr(nHa,nLen)
nLen := Len( cSt )
cSt := StringToHex( encrypt(cSt,"miclave"), nLen )
De esta forma podrás guardarla en un campo de una tabla, en un .ini, en el
registro de windows o donde quieras, evitando el problema de los caracteres
nulos. Eso sí, ten en cuenta que una vez convertida a hexadecimal. la cadena
ocupa justo el doble de bytes que la cadena original.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info