elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C - Problema al descifrar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C - Problema al descifrar  (Leído 4,630 veces)
Fastolfe

Desconectado Desconectado

Mensajes: 69


Ver Perfil
C - Problema al descifrar
« en: 21 Marzo 2011, 22:27 pm »

Buenas!! Se me ha ocurrido hacer un programilla de cifrado de texto. El algoritmo no podría ser más simple, pero lo que es la cifrado funciona. Mi problema viene al descifrar, que aparentemente se hace bien, incluso puedo ver el texto original en la carpeta, pero al abrir el archivo me sale el siguiente error:

Gedit has not been able to detect the character encoding.
Please check that you are not trying to open a binary file.
Select a character encoding from the menu and try again.

Este es el código:

Código
  1. #include <stdio.h>
  2.  
  3. #define MAXT 1000
  4. #define MAXP 20
  5.  
  6. FILE *crypt;
  7.  
  8. char texto[MAXT];
  9. char pass[MAXP];
  10. int pass2;
  11.  
  12. int makepass();
  13.  
  14. void clear(){
  15. int i = 0;
  16. for (i = 0; i < 100; i++){
  17. printf("\n");
  18. }
  19. }
  20.  
  21. int main(){
  22.  
  23. clear();
  24. printf("Pass: ");
  25. fflush(stdin);
  26. gets(pass);
  27.  
  28. makepass();
  29. int i = 0;
  30.  
  31. crypt = fopen("Encripted.txt", "r");
  32.  
  33. for (i = 0; i < MAXT; i++){
  34. texto[i] = fgetc(crypt);
  35. }
  36.  
  37. fclose(crypt);
  38. crypt = fopen("No-encripted.sh", "w+");
  39.  
  40. for (i = 0; i < MAXT; i++){
  41. texto[i] = texto[i] - pass2;
  42. }
  43.  
  44. for (i = 0; i < MAXT; i++){
  45. fprintf(crypt, "%c", texto[i]);
  46. }
  47. fclose(crypt);
  48. return 0;
  49. }
  50.  
  51. int makepass(){
  52. int i = 0;
  53. for (i = 0; i < MAXP; i++){
  54. pass2 = pass2 + i - pass[i];
  55. }
  56. return 0;
  57. }
  58.  


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: C - Problema al descifrar
« Respuesta #1 en: 21 Marzo 2011, 22:51 pm »

Cuidadillo con gets y fflus(stdin), que pueden dar resultados un pelín inesperados:
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Entrando con tu programa. Tengo la impresión que el problema pueda ser que no te fijas si has leído el final de fichero, y entonces eso te de problemas.
Código
  1. for (i = 0; i < MAXT; i++){
  2. texto[i] = fgetc(crypt);
  3. }

comprobar si
Código
  1. texto[i]==EOF
y si lo es, finalizar el bucle sería una solución.

Pero sigue siendo raro. Has probado a hacer un cat desde consola del fichero escrito a ver que sale?


« Última modificación: 21 Marzo 2011, 23:14 pm por Akai » En línea

Fastolfe

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: C - Problema al descifrar
« Respuesta #2 en: 23 Marzo 2011, 18:29 pm »

No suelo usar el gets normalmente, en este caso ha sido por comodidad más que nada. Ok, tendré cuidado con los fflush jaja.
Probaré a comprobar si ha leido el final del fichero. Gracias!

No se que es un cat xD
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: C - Problema al descifrar
« Respuesta #3 en: 23 Marzo 2011, 18:57 pm »

http://linux.die.net/man/1/cat

Concatena ficheros, pero para lo que nos interesa, es que hagas en consola:

cat fichero

si eso no muestra el fichero como toca, entonces es que tienes problemas al escribirlo (¿probable?). Si lo hace, tienes problemas con el gedit (raro)
En línea

Fastolfe

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: C - Problema al descifrar
« Respuesta #4 en: 23 Marzo 2011, 19:04 pm »

Con el cat si que me aparece el contenido del fichero correctamente.
Pero al abrir el fichero con el gedit me aparece el mismo mensaje.

He probado a cambiar el bucle de estas dos formas, pero sigue apareciendo el mensaje:

Código
  1. for (i = 0; i < MAXT; i++){
  2. texto[i] = fgetc(crypt);
  3. if (texto[i] == EOF){
  4. break;
  5. }
  6. }
  7.  
  8. for (i = 0; i < MAXT; i++){
  9. if (texto[i] != EOF){
  10. texto[i] = fgetc(crypt);
  11. }
  12. }
  13.  
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: C - Problema al descifrar
« Respuesta #5 en: 23 Marzo 2011, 19:38 pm »

gedit te abre bien los demás ficheros (cualquier otro fichero de texto que tengas) o también te da problemas?

Has comprobado que el fichero desde donde lees está correcto?

Además, ten cuidado con eso:
Código
  1. texto[i] = texto[i] - pass2;
no sea cosa que esté jodiendo la representación. Sobretodo si pass2 es un número superior a 90.

Cuando escribas, prueba a escribir, después de la parte cifrada, un EOF.

Por otro lado, quizá abriendo el fichero a escribir como w a secas ayude. w+ es para lectura y escritura.Esto en principio no debería ser el problema, pero por si las moscas.
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: C - Problema al descifrar
« Respuesta #6 en: 23 Marzo 2011, 20:24 pm »

Código
  1. #include <stdio.h>
  2.  
  3. FILE *fp1, *fp2;
  4.  
  5. int cript (char *nocrypt, char *encrypt, int value)
  6. {
  7. char car;
  8. fp1 = fopen (nocrypt, "r+");
  9. fp2 = fopen (encrypt, "w+");
  10.  
  11. while (!feof (fp1))
  12. {
  13. car = fgetc (fp1);
  14. car += value;
  15. fputc (car, fp2);
  16. }
  17.  
  18. fclose (fp1);
  19. fclose (fp2);
  20. return 0;
  21. }
  22.  
  23. int main (int argc, char *argv [])
  24. {
  25. printf ("Krypter 0.1 : Sagrini 2011 : elhacker.net\n");
  26.  
  27. if (argc != 4)
  28. {
  29. printf ("[!!!] Use: %s <file-to-crypt> <dest-file> <pass-value>\n\n", argv [0]);
  30. return 1;
  31. }
  32. if (atoi (argv [3]) > 32 || atoi (argv [3]) < 0)
  33. {
  34. printf ("[!!!] Nice try, but Pass-Value will be a correct number (<32 && >0).\n\n");
  35. return 1;
  36. }
  37.  
  38. cript (argv [1], argv [2], atoi (argv [3]));
  39. printf ("[+] Crypt finished with no errors.\n\n");
  40. return 0;
  41. }
  42.  

1) No es recomendable usar variables globales si no hace falta. No te acostumbres. Tampoco es bueno usar mucho DEFINE.
2) Tu código puede simplificarse mucho. Tienes líneas de más que hacen el texto más confuso.

Tu código tiene muchísimas cosas que mejorar. Te cedo el mío (de ahora mismo ;)), ahora añádele funciones de comprobación de errores y arregla el código para que la salida sea legible; yo mismo te concederé un pin :) jeje. Si no te importa déjame algo de créditos :silbar:

PD: No, no me he puesto a pensar cómo hacer salida legible...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Fastolfe

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: C - Problema al descifrar
« Respuesta #7 en: 5 Abril 2011, 16:46 pm »

Perdón por tardar tanto tiempo en responder... he tenido bastantes examenes y apenas he podido meterme unos minutos...

Akai:

El fichero está bién (supongo) porque si en lugar de escribir el texto descifrado en un fichero, lo escribo en pantalla sale perfectamente.

Creo que el que pass2 sea superior a 90 no afecta al buen funcionamiento del programa, sino a los caracteres resultantes del cifrado tan solo. El w+ no me resuelve el problema...

Sagrini:

Tomo nota de ambos consejos, procuraré pasar las variables como parametros a las funciones en lugar de declararlas globales e intentaré simplificar los códigos que haga a partir de ahora.

Probaré tu código =)

Gracias!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al descifrar clabe web wifiway
Wireless en Linux
Norlak 4 5,434 Último mensaje 7 Octubre 2010, 10:48 am
por Norlak
¿Problema al descifrar?. WPA « 1 2 »
Wireless en Windows
josu22 12 11,890 Último mensaje 7 Septiembre 2012, 02:44 am
por El_Andaluz
[Problema] Descifrar con hashcat
Criptografía
WilliamWalance22 0 2,995 Último mensaje 26 Septiembre 2017, 18:57 pm
por WilliamWalance22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines