[SOLUCIONADO] Problema al cifrar un archivo con cifrado xor

Iniciado por Frijolito, Noviembre 24, 2018, 12:18:17 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 24, 2018, 12:18:17 AM Ultima modificación: Noviembre 27, 2018, 08:14:42 PM por xyz
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

Código: c
#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;
}

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,




No tienes permitido ver los links. Registrarse o Entrar a mi 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í:
Código: c
#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;
}

Al parecer si, ambas avanzan.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Sigue trayendo cosas de interes.