Y para que no kede en el olvido decidi ponerlo aca para q lo vean y opinen q les parece, solo para entendidos jeje.
El metodo se parece mucho a cuando se teje al corchet q se va entrelazando todo sobre si mismo, y para destejer se "tira" del hilo y se desahace lo entrelazado, capaz para algunos le parece una analogia mui extraña y sin sentido pero cuando se lo mira en profundidad se ve que tiene mucho que ver.
Bueno para q tengan una idea de lo q hace el codigo, primero lo voy a mostrar en una especie de pseudo-codigo, asi se entiende mas claro:
se recorre la frase a cifrar avanzando sobre ella y se efectua la siguiente operacion (sobre un caracter) :
Código:
"cifrado anterior" - ("descifrado actual" ^ "descifrado siguiente) = caracter cifrado
El metodo se repite hasta llegar al anteultimo caracter, y ahi termina.
Logicamente para el primer caracter no existe uno anterior cifrado asi q se elige un valor al azar.
Para descifrar la frase se recorre del final hacia el inicio, comenzando desde el anteultimo caracter y se realiza la operacion:
Código:
("cifrado siguiente" - "cifrado actual") ^ "descifrado anterior" = caracter descifrado
Hasta llegar a la segunda letra, y para decodificar esta, es necesario conocer el valor elejido al azar anterior mente al cifrar.
Y asi obtenemos la frase descifrada.
Ahora voy a poner un codigo q hace eso mismo, y para solucionar el tema de elegir un valor al azar para empezar se me ocurrio usar el ultimo de la frase ya q permanece igual en las 2 etapas.
Antes de seguir, tengo q aclar q no se me ocurrio todo como lo estoy exponiendo en el hilo ahora jaja, sino q solo se me ocurrio la operacion q cifra, basada en operaciones con un caracter anterior y uno posterior, y luego ya haciendo el codigo, resolvi los detalles q ivan apareciendo.
Ahora si el codigo:
Código
int main(int argc, char *argv[])
{
unsigned char frase[]="Hola esta es la frase magica.";
unsigned char antencrypt,antedesencrypt;
int tam,i;
printf("Frase Original: %s\n\n",frase);
tam=strlen((char*)frase);
/* lo siguiente seria como una key que simula ser el caracter anterior cifrado, para poder empezar a encryptar.
pero como soy pillo, para no poner un valor aleatorio le pongo el ultimo caracter de la frase. */
antencrypt = frase[tam-1];
for(i=0;i<tam-1;i++){
frase[i]= antencrypt - (frase[i] ^ frase[i+1]);
antencrypt=frase[i];
}
printf("Frase Encryptada: %s\n\n",frase);
antedesencrypt=frase[tam-1];
for(i=tam-2;i;i--){
frase[i]= ( frase[i-1] - frase[i] ) ^ antedesencrypt ;
antedesencrypt=frase[i];
}
frase[i]= ( frase[tam-1] - frase[i] ) ^ antedesencrypt ;
printf("Frase Desencryptada: %s\n\n",frase);
return 0;
}
Bueno eso es todo, espero a alguien lo sepa valorar, y q no pregunte q es lo q hace jaja.
Saludos!!










Autor



En línea


