Underc0de

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
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
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.