Underc0de - La Casa de los Informáticos

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Frijolito en Noviembre 24, 2018, 12:18:17 AM

Título: [SOLUCIONADO] Problema al cifrar un archivo con cifrado xor
Publicado por: Frijolito en Noviembre 24, 2018, 12:18:17 AM
Hola, mi problema es que tengo un txt que dice "prueba1234567890" y el programa ( en C ) cifra dependiendo de la clave que le ponga, uso de llave 45, y cifra un carácter y otro no se salta y no se porque. Ejemplo:

prueba1234567890  ---> p]uXbO13579  | Eso muestra
prueba1234567890  ---> ]_XHOL             | Eso debería mostrar

No muestra los caracteres en los cuales se trasforman los numero pero es como una caja con 4 caracteres pequenos como 001c o  001f

Si se dan cuenta se salta un carácter al cifrar les voy a dejar el código si es que me pueden ayudar estaría muy agradecido

#include <stdio.h>
#include <stdlib.h>
int main(){
int clave;
char c;
printf(" [>>] Introduca la clave de cifrado [0 - 255]\n");
scanf("%i",&clave);

FILE *file;
file = fopen("prueba.txt", "rb+");
while((c = fgetc(file)) != EOF){
fputc((c ^ clave), file);
}
fclose(file);
return 0;
}
Título: Re:Problema al cifrar un archivo con cifrado xor
Publicado por: Solid Water en Noviembre 24, 2018, 12:43:56 AM
Al parecer lo que sucede es que:

prueba1234567890

Leé el primer caracter 'p'

La posición queda después de la p e in serta ] (la p cifrada) sobrescribiendo la r.

Entonces Agarra la u, avanza un caracter y e ingresa X sobrescribiendo e.
Entonces agarra la b y la pone como O sobrescribiendo la a. 

Por lo que queda p]uXbO

La idea sería que utilices (fseek) para volver un caracter atrás antes de hacer el fputc.

Saludos,



Título: Re:Problema al cifrar un archivo con cifrado xor
Publicado por: Frijolito en Noviembre 24, 2018, 01:14:59 AM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Al parecer lo que sucede es que:

prueba1234567890

Leé el primer caracter 'p'

La posición queda después de la p e in serta ] (la p cifrada) sobrescribiendo la r.

Entonces Agarra la u, avanza un carácter y e ingresa X sobrescribiendo e.
Entonces agarra la b y la pone como O sobrescribiendo la a. 

Por lo que queda p]uXbO

La idea sería que utilices (fseek) para volver un caracter atrás antes de hacer el fputc.

Saludos,
Ya lo arregle gracias a tu respuesta, pero quería saber si el problema se produce porque al usar una función como fputc o fgets tiene un contador y hace que el cursor que lee el archivo avance o algo así?

Al final el código quedo así: #include <stdio.h>
#include <stdlib.h>

int main(){
int clave;
int i = 0;
char c;
printf(" [>>] Introduca la clave de cifrado [0 - 255]\n");
scanf("%i",&clave);

FILE *file;
file = fopen("prueba.txt", "rb+");
while((c = fgetc(file)) != EOF){
fseek(file, i, SEEK_SET);
i++;
fputc((c ^ clave), file);
}
i = 0;
fclose(file);
return 0;
}
Título: Re:Problema al cifrar un archivo con cifrado xor
Publicado por: Solid Water en Noviembre 24, 2018, 01:24:58 AM
Al parecer si, ambas avanzan.

http://www.cplusplus.com/reference/cstdio/fputc/ (http://www.cplusplus.com/reference/cstdio/fputc/)
https://www.tutorialspoint.com/c_standard_library/c_function_fgetc.htm (https://www.tutorialspoint.com/c_standard_library/c_function_fgetc.htm)

Sigue trayendo cosas de interes.