Código:
#include<stdio.h>
#include<stdlib.h>
char cifrar(char *,int);
int main()
{
char texto[200]; //texto a cifrar
char nombre[20]; //nombre que le vamos a dar al fichero de texto en el que se va a guardar el texto cifrado
FILE *pf; //puntero de tipo FILE, necesario para manejar ficheros
int i=0;
char textoencriptado[200]; //textoencriptado es el array en el que vamos a guardar el texto cifrado
printf(" ENCRIPTADOR DE TEXTOS!!!\n\n");
printf("Introduce todo el texto a cifrar y despues Enter\n");
gets(texto);
printf("Introduce el nombre del fichero que contendra\n");
printf("el texto cifrado (se debe dar segun la forma nombre.txt)\n");
scanf("%s", &nombre);
getchar();
pf=fopen(nombre,"w");
//comprobamos que no haya errores al abrir el fichero:
if(pf==NULL)
{
printf("Error al abrir el fichero. Pulsa Enter para salir\n");
getchar();
exit(1);
}
while(texto[i]!='\0' && ferror(pf)==0) //respectivamente, mientras que no lleguemos al final del texto y no haya error
//ferror devuelve 0 cuando no hay error, por eso ponemos que tiene que ser 0
{
textoencriptado[i]=cifrar(texto,i);
printf("%c", textoencriptado[i]);
getchar();
//esto escribe caracter por caracter el texto en el fichero, se puede hacer directamente con la cadena de caracteres,
//pero como lo que queremos es cifrar, aplicamos una operacion matematica sobre cada caracter, es decir,
//convertimos el caracter a entero, aplicamos un algoritmo, y volvemos a pasar el textoencriptado resultante a caracter
fputc(textoencriptado[i],pf);
i++;
}
printf("El texto se ha cifrado correctamente!\n");
fclose(pf);
printf("Enter para salir del programa\n");
getchar();
return 0;
}
char cifrar(char *texto, int i)
{
char textoencriptado[200];
//aqui aplicamos la operacion matematica que queramos
//pero como el texto saldra cifrado, quien lo lea no podra saber en principio la operacion de encriptacion que se ha aplicado
if(texto[i]=='A') //asignamos unos valores aleatoriamente antes de ver, con los ultimos 6 else if, si el caracter a cifrar se encuentra en el rango especificado de valores,
//de esta manera, hacemos muy complicado encontrar una regla para descifrar el texto
textoencriptado[i]='.';
else if(texto[i]=='.')
textoencriptado[i]=' ';
else if(texto[i]==' ')
textoencriptado[i]='a';
else if(texto[i]=='b')
textoencriptado[i]='B';
else if(texto[i]=='e')
textoencriptado[i]='l';
else if(texto[i]=='+')
textoencriptado[i]='=';
else if(texto[i]=='?')
textoencriptado[i]='t';
else if(texto[i]=='3')
textoencriptado[i]='b';
else if(texto[i]=='9')
textoencriptado[i]='0';
else if(texto[i]=='e')
textoencriptado[i]='k';
else if(texto[i]=='n')
textoencriptado[i]='H';
else if(texto[i]=='i')
textoencriptado[i]='p';
else if(texto[i]=='Q')
textoencriptado[i]='s';
else if(texto[i]=='R')
textoencriptado[i]='x';
else if(texto[i]=='r')
textoencriptado[i]='E';
else if(texto[i]=='u')
textoencriptado[i]='0';
else if(texto[i]=='p')
textoencriptado[i]='d';
else if(texto[i]=='@')
textoencriptado[i]='Q';
else if(texto[i]=='d')
textoencriptado[i]='D';
else if(texto[i]==')')
textoencriptado[i]='I';
else if(texto[i]>='{')
textoencriptado[i]='(';
else if(texto[i]>='0' && texto[i]<=';')
textoencriptado[i]=texto[i]+'STX';
else if(texto[i]>='<' && texto[i]<='M')
textoencriptado[i]=texto[i]+'VT';
else if(texto[i]>'M' && texto[i]<='Z')
textoencriptado[i]=texto[i]+'SOH';
else if(texto[i]>=']' && texto[i]<='i')
textoencriptado[i]=texto[i]-'DC4';
else if(texto[i]<='j' && texto[i]<='u')
textoencriptado[i]=texto[i]-'ETX';
return textoencriptado[i];
}
PD: no pretendo debatir si la manera de cifrar es más o menos segura, únicamente busco saber por qué no funciona.
GRACIAS. SALUDILLOS.