Hola Petaca
Tienes tres posibilidades aquí:
1. Encriptar el nombre del usuario y su password. El proceso completo sería:
a. Encriptas el nombre del usuario y el password del usuario
b. Guardas esos datos encriptados en una tabla
c. Cuando alguien quiere ingresar a tu sistema, le pides su nombre y password
d. Encriptas el nombre y el password introducidos
e. Los comparas con los que tienes guardados en la tabla
f. Si son exactamente iguales, le permites el acceso
2. Guardar en una tabla el checksum (suma de control). El proceso completo sería:
a. Usando la función SYS(2007) y una semilla de número primo obtienes un checksum
b. Guardas ese checksum en una tabla
c. Cuando alguien quiere ingresar a tu sistema, le pides su nombre y password
d. Usas la función SYS(2007) y la misma semilla anterior para hallar el checksum del nombre y el password introducidos
e. Los comparas con los que tienes guardados en la tabla
e. Si son exactamente iguales, le permites el acceso
3. Una combinación de las dos anteriores
La ventaja de la opción 1. es que si tú estás usando una función propia de encriptación podrías eventualmente efectuar el proceso inverso y conocer cual es el nombre y el password del usuario. La desventaja es que si un hacker conoce el nombre del usuario aunque no conozca su password podría a fuerza de pruebas y errores alguna vez descubrir ese password.
La ventaja de la opción 2. es que es imposible para un hacker común viendo solamente un número saber cual es el nombre y el password del usuario, haga lo que haga no podrá descubrirlo. La desventaja es que si *tú* alguna vez necesitas conocerlo tampoco lo lograrás.
La opción 3. funcionaría de la siguiente manera: Hallas el checksum con la función SYS(2007) y luego guardas ese valor encriptado en una tabla. En ese caso puedes estar tranquilo, ni la CIA podrá descubrirlo (y tampoco tú si alguna vez necesitas verlo desencriptado).
Funciones propias de encriptación hay millones, la más sencilla se basa en simplemente reemplazar un caracter por otro. Los mejores algoritmos son aquellos en los cuales un caracter no es siempre reemplazado por el mismo caracter, ya que esos se descubren muy facilmente. Por ejemplo, si cada vez que aparece la letra "A" la reemplazas por la letra "K" en pocos minutos alguien con experiencia lo descifrará. Una función elemental de encriptación y desencriptación sería la siguiente:
FUNCTION Encriptar
LParameters tcTexto, tnOrden
Local lcTextoEncriptado, lnI, lcCaracter
lcTextoEncriptado = ""
For lnI = 1 to Len(tcTexto)
lcCaracter = Chr(Asc(SubStr(tcTexto, lnI, 1)) + iif(tnOrden == 1, 1, -1) * lnI)
lcTextoEncriptado = lcTextoEncriptado + lcCaracter
Next lnI
Return(lcTextoEncriptado)
*
*
Que la invocarías así:
lcNombreEncriptado = Encriptar("Petaca", 1)
para encriptar el texto, y para desencriptarlo:
lcNombreNormal = Encriptar(lcNombreEncriptado, 0)
Desde luego te aconsejo que utilices algún algoritmo más difícil de descubrir ya que el que usa esa función es demasiado elemental.
Si vas a usar la función SYS(2007) lo aconsejable es que uses de semilla un número muy grande y si es primo mucho mejor, algo como:
? SYS(2007, "Petaca", 29753)
Saludos.
Walter.