[aporte]c++ cifrar/descifrar archivos comando

Iniciado por daryo, 10 Junio 2013, 20:00 PM

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

daryo

 :P
Código (c++) [Seleccionar]
   
#include <iostream>
    #include <string>
    #include <cstring>
    #include <fstream>

    using namespace std;


    void ayuda()
    {
    cout << "formato: cifrar.exe parametro \"archivo a cifrar\" \"archivo cifrado\"" << endl;
    cout << "parametros:"<< endl << "-c cifrar" << endl << "-d descifrar" << endl;
    }



    int main(int argc,char *argv[])
       {
       if(argc==4)
           {
               char *buf;
               int tamano;
               int n=1;

               char letra;
               ifstream archivo(argv[2],ios::binary);
               if(archivo.fail())
                   {
                   cout << "no fue posible abrir el archivo"<< endl;
                   return 1;
                   }
               //-----------------------------
               archivo.seekg(0,ios::end);
               tamano=archivo.tellg();  //encuentro el tamano del archivo
               archivo.seekg(0,ios::beg);
               buf=new char[tamano];
               //-----------------------------
               archivo.read(buf,tamano);
               archivo.close();
               ofstream salida(argv[3],ios::binary);
               for(int xd=0;xd<tamano;xd++)
                   {
                   if(strcmp(argv[1],"-c")==0)
                       {
                       letra=buf[xd]+n;
                       }
                   else if(strcmp(argv[1],"-d")==0)
                       {
                       letra=buf[xd]-n;
                       }
                   else
                       {
                       cout << "parametros erroneos"<<endl;
                       return 1;
                       }
                   salida << letra;
                   if(n>10)
                       {
                       n=1;
                       }
                       n++;
                   }
                   salida.close();
                delete [] buf;
               return 0;
           }
       else
           {
               ayuda();
           }


       return 0;
       }

buenas

0xDani

Con qué estándar y/o compilador te compila esto? :

Código (cpp) [Seleccionar]
char buf[tamano];

Sé que en C99 se puede, pero no creo recordar que se pudiera en C++.

En todo caso, un array estático es normalmente ubicado en la stack. Si tratas de cifrar un archivo de algunos MB, se te puede desbordar la stack y crashear el programa.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

daryo

Cita de: 0xDani en 10 Junio 2013, 21:30 PM
Con qué estándar y/o compilador te compila esto? :

Código (cpp) [Seleccionar]
char buf[tamano];

Sé que en C99 se puede, pero no creo recordar que se pudiera en C++.

En todo caso, un array estático es normalmente ubicado en la stack. Si tratas de cifrar un archivo de algunos MB, se te puede desbordar la stack y crashear el programa.

Saludos.

tienes razon me lo compilo el gcc en codeblocks con windows .
lo hice rapido casi con afan :P luego lo corrijo
buenas

amchacon

Cita de: 0xDani en 10 Junio 2013, 21:30 PM
Con qué estándar y/o compilador te compila esto? :

Código (cpp) [Seleccionar]
char buf[tamano];

Sé que en C99 se puede, pero no creo recordar que se pudiera en C++.

En todo caso, un array estático es normalmente ubicado en la stack. Si tratas de cifrar un archivo de algunos MB, se te puede desbordar la stack y crashear el programa.
C++ no lo tiene recogido en el estándar, pero tampoco lo prohíbe.

Con el Mingw (o g++) te lo compila sin problemas, sin warnings ni nada.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

daryo

#4
ya correji el programa ahora uso memoria dinamica y es completamente estandar
buenas