[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,




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í:
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.

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
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

Sigue trayendo cosas de interes.