Para que inventar la pólvora toma esto
Publicado por
Edwin (1 intervención) el 04/02/2016 20:56:50
Buen código para poder implementarlo, y comprender como funcionan los procesos de encriptación.
Aunque por lo que veo ya tiene mucho tiempo de estar aquí.
Solo le marcaría un error en la parte.
IF c>=LEN(clAve)
c = 1
ENDIF
Funciona porque el código está en ambas partes, (codificador y decodificador) pero realmente al tener el signo igual que, automáticamente se pasa al valor 1 de la clave lo que le impide tomar el último valor de la clave. en otras palabras si pones una clave de 20 caracteres, realmente funciona como si solo fuera de 19, si pones 15 caracteres funciona como si fuera de 14. etc.
Por lo demás está muy bien.
En base a este buen aporte encontrado, quiero agregarles algo extra que me parece intereseante y que ha surgido de aquí mismo. espero les sea de utilidad.
copia este código y ejecútalo
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*!* encriptas un valor semilla, ejemplo el caracter 'A' (puede ser cualquier otro),
*!* lo envías al encriptador como tu cadena de texto en secuencia (la cantidad que desees, en este caso 30 veces ) ej. 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
*!* el encriptador de te devolverá un resultado en xxxxxxx
*!* utilizas el descifrador de clave enviando el resultado obtenido en xxxxxxx, junto al caracter semilla que utilizaste en este caso 'A'
*!* bingo obtienes la clave utilizada por el encriptador.
*!* si envias 30 caracteres Y el resultado del descifrador de clave empieza a repetirse en el valor 20, la clave es de 20 caracteres si no se repite tiene mas caracteres,
*!* TRY it
xxxxxxx= encripta('AAAAAAAAAAAAAAAAAAAAAAAAA')
WAIT WINDOW xxxxxxx
vxretorna= descifraclave(xxxxxxx,'A')
WAIT WINDOW vxretorna
RETURN vxretorna
FUNCTION encripta
LPARAMETER texto
LOCAL textoenc, j, letra
clave = ')&H%$V1#@^+=?/><:MN*-'
textoenc = SPACE(0)
c = 1
FOR j = 1 TO LEN(texto)
letra = MOD(ASC(SUBSTR(texto, j, 1))+ASC(SUBSTR(clave, c, 1)), 256)
textoenc = textoenc+CHR(letra)
c = c+1
IF c>LEN(clave)
c = 1
ENDIF
ENDFOR
RETURN textoenc
ENDFUNC
FUNCTION descifraclave
LPARAMETER texto,semilla
LOCAL textoenc, j, letra
textoenc = SPACE(0)
c = 1
FOR j = 1 TO LEN(texto)
letra = MOD(ASC(SUBSTR(texto,j,1))-ASC(semilla), 256)
textoenc = textoenc+CHR(letra)
ENDFOR
RETURN textoenc
ENDFUNC
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&