SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: sansoto5000 en Jueves 31 de Agosto de 2006, 03:16

Título: Encriptar Archivos De Cualquier Tipo
Publicado por: sansoto5000 en Jueves 31 de Agosto de 2006, 03:16
Quiero hacer un programa q encripte cualquier tipo de archivos partiendo desde la base de tomarlos a todos como archivos binarios...

o sea cambiar los 1 (unos) a 0 (ceros) y viceversa....pero tengo un problema....NO ME SALE!  :blink: ...

si alguien podria pasarme un poco de codigo sobre como encriptar el archivo...aunque sea con XOR...estaria bastante agradecido xD


  :smartass:
Título: Re: Encriptar Archivos De Cualquier Tipo
Publicado por: Max_D en Viernes 1 de Septiembre de 2006, 00:25
Hay algo que te podria ayudar y se llama Flex. Aqui te pongo un ejemplo de como funciona, no es lo que resuelve tu problema, pero puede servirte de ayuda:

Código: Text
  1. %{
  2. /* Este analizador lee de un fichero una serie de nombres (compuestos de letras
  3. mayusculas y minúsculas) y los va a poner sobre
  4. el fichero de salida en sentido inverso*/
  5. #include <string.h> /* MIRAR DONDE PONEMOS LAS LIBRERIAS QUE NOS HACE FALTA*/
  6.  
  7. int entero = 0;
  8. float real = 0;
  9. int contador = 0;
  10. char c;
  11. int i;
  12. %}
  13.  
  14.  
  15. INTEGER [0-9]+|[-][0-9]+
  16. FLOAT [0-9]+[.][0-9]+|[-][0-9]+[.][0-9]+
  17. OPERACION ("*"|"+"|"-"|"/")
  18. ESPECIAL ("ª"|"º"|"\"|"!"|"|"|"""|"#"|"$"|"%"|"&"|"¬"|"/"|"("|")"|"="|"?"|"'"|"¿"|"¡"|"@"|"^"|"`"|"["|"*"|"]"|"¨"|"´"|"{"|"ç"|"}"|";"|","|":"|"."|"_"|"<"|">")
  19.  
  20. %%
  21.  
  22.  
  23. [A-Z] {
  24.         c = yytext[0];
  25.         if (c != 'Z') {
  26.          c++;
  27.         }
  28.         else {
  29.             c = 'A';
  30.         }
  31.         fprintf(yyout,"%c",c);
  32. }
  33.  
  34. {INTEGER} {
  35.     entero=atoi(yytext);
  36.     entero=entero*2;
  37.     fprintf(yyout,"%d",entero);
  38. }
  39.  
  40. {FLOAT} {
  41.     real=atof(yytext);
  42.     real=real+4;
  43.     fprintf(yyout,"%f",real);
  44. }
  45.  
  46. {INTEGER}{OPERACION}{INTEGER}|{FLOAT}{OPERACION}{FLOAT} {
  47.     printf("ERROR: La operacion no ha sido encriptada\n");
  48.     fprintf(yyout,"%s",yytext);
  49. }
  50.  
  51. [a-z] {
  52.     c = yytext[0];
  53.     if (c != 'z') {
  54.         c++;
  55.     }
  56.     else {
  57.        c = 'a';
  58.     }
  59.     fprintf(yyout,"%c",c);
  60. }
  61.  
  62. [a-z][a-z] {
  63.     c = yytext[0];
  64.     if (c != 'z') {
  65.        c++;
  66.     }
  67.     else {
  68.        c = 'a';
  69.     }
  70.     fprintf(yyout,"%c",c);  
  71.   c = yytext[1];
  72.     fprintf(yyout,"%c",c);  
  73. }
  74.  
  75. {ESPECIAL}[A-Za-z]+{ESPECIAL} {
  76.   contador = yyleng;
  77.   char a = yytext[0];
  78.   char b = yytext[contador - 1];
  79.   if (a == b) {
  80.     c = ':';
  81.           fprintf(yyout,"%c",c);
  82.   }
  83.   else {
  84.           fprintf(yyout,"%c",a);
  85.   }
  86.   entero = atoi(&yytext[1]);
  87.   entero++;
  88.   fprintf(yyout, "%d", entero);
  89.   for (i = 2; i < contador - 2; i++) {
  90.     fprintf(yyout, "%c", yytext[i]);
  91.   }
  92.   entero = atoi(&yytext[contador - 2]);
  93.   entero++;
  94.   fprintf(yyout, "%d", entero);
  95.   if (a == b) {
  96.     c = ':';
  97.           fprintf(yyout,"%c",c);
  98.   }
  99.   else {
  100.       fprintf(yyout,"%c",a);
  101.   }
  102. }
  103.  
  104.  
  105. %%
  106. yywrap(){
  107. }
  108. main(int argc,char *argv[]){
  109.   if (argc!=3){
  110.     printf("LOS PARAMETROS SON:");
  111.     printf("\n1.-Dime el fichero de entrada");
  112.     printf("\n2.-Dime el fichero de salida");
  113.     exit(1);
  114.   }
  115.   yyin = fopen(argv[1],"rb");
  116.   if (yyin==NULL){
  117.     printf("\n No puedo abrir %s",argv[1]);
  118.     exit(1);
  119.   }
  120.   yyout = fopen(argv[2],"wb");
  121.   if (yyout==NULL){
  122.     printf("\n No puedo crear %s",argv[2]);
  123.     exit(1);
  124.   }
  125.   yylex();
  126. }
  127.  
  128.  


Cuando le pasas al flex ese archivo mediante la ventana de ms-dos poniendo en el directorio donde se encuentran los dos "flex nombre_archivo.txt", flex crea un archivo .c que debes compilar con dev-c++ por ejemplo y te generara un ejecutable al que debes pasarle por parametro un fichero de entrada con lo que quieres encriptar y un fichero de salida encriptado. Si tienes alguna duda, mandame un privado.  :smartass:
Título: Re: Encriptar Archivos De Cualquier Tipo
Publicado por: fuhrer en Viernes 1 de Septiembre de 2006, 00:33
Hola, que tal

Para poder ayudarte, creo que sería ueno que menciones la forma en que estas haciendo tu progama, ya que tal ves el error este en tu pogama o en la forma de leer el archivo.

Hasta luego.
Título: Re: Encriptar Archivos De Cualquier Tipo
Publicado por: Geo en Viernes 1 de Septiembre de 2006, 14:44
Cita de: "sansoto5000"
o sea cambiar los 1 (unos) a 0 (ceros) y viceversa....pero tengo un problema....NO ME SALE!  :blink: ...
 
¿Qué es lo que no te sale?

Algo muy sencillo sería leer un archivo byte a byte, a cada byte leído hacerle una operación lógica (xor, por ejemplo), y ese byte modificado irlo guardando en otro archivo.

Como dice fuhrer, explica un poco más cómo estás tratando de trabajar :).

Saludos,
JJ (Geo).
Título: Re: Encriptar Archivos De Cualquier Tipo
Publicado por: sansoto5000 en Miércoles 6 de Septiembre de 2006, 21:48
Gracias a todos por su respuesta disculpen haberme expresado mal en mi problema...

como dice Geo yo quisiera hacer una operacion logica sobre los archivos leyendolos byte por byte....yo utilize el metodo de negación ,ya logre hacerlo de esa manera....ahora estoy intentando hacerlo con XOR y me encuentro con un nuevo problema....si alguien seria tan amable de mostrarme como seria esta operacion logica XOR estaria muy agradecido.

Desde ya gracias por ayudarme!  :comp:
Título: Re: Encriptar Archivos De Cualquier Tipo
Publicado por: Geo en Miércoles 6 de Septiembre de 2006, 23:15
Cita de: "sansoto5000"
ahora estoy intentando hacerlo con XOR y me encuentro con un nuevo problema....
Esteee, ¿cuál es el problema :P?

Saludos,
JJ (Geo).