[ create a new paste ] login | about

Link: http://codepad.org/SqG55mTm    [ raw code | output | fork | 2 comments ]

C++, pasted on Feb 21:
#include <iostream>
#include <ctime>
#include <string.h>
#include <fstream>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
/*By STAKEWINNER 00
You can add your name with your modifications but you can NOT delete my name
*/

//Funcion que encripta el archivo
int CR1M2 (char str[256], int argc, string pass, char str2[256]) // str -> archivo a encriptar, argc -> numero de argumentos que introducio el usuario, pass -> contraseña, str2 -> archivo de salida (opcional)
{
   if (argc > 2) //Si el usuario ha introducido un nombre de un archivo y por tanto hay más de 2 argumentos no hace nada en caso contrario le pide que introduzca el nombre del archivo
    {
        
    } else
    {
        
        cout << "NOMBRE DEL ARCHIVO DE TEXTO A ENCRIPTAR: ";cin.get();cin.get (str,256);
        
    }
    
    if (argc > 3) //Si el usuario ha introducido una password y por tanto hay más de 3 argumentos no hace nada en caso contrario le pide que introduzca la password
    {
      
    } else 
    {
      cout  << endl<< "INTRODUZCA LA PASSWORD ";cin >> pass;
      
    }
    
    ifstream entrada;  
    entrada.open (str,ios::binary); //Archivo que se va a encriptar
    if (!entrada) //Si el archivo no existe informa del error
    {
        cout << endl << endl << "ERROR EN EL ARCHIVO"; return 0;
    }
    string mens2=""; //Variable usada para almacenar los caracteres que luego se guardaran en el archivo de salida
    cout << endl << endl << "PUEDE TARDAR SEGUNDOS DEPENDIENDO DE LA LONGITUD DEL TEXTO" << endl << endl; 
    
    //Este fragmento guarda en size el tamaño del archivo
    entrada.seekg(0, ios::end); 
    long size = entrada.tellg();
    entrada.seekg(0, ios::beg);
    
    string clave; //Esta variable guardara la clave que luego pasara a CLAVE.txt, esta clave es necesaria para desencriptar el texto
    char mens; //Donde se akmacenara cada caracter que se vaya a encriptar
    char letra; //Variable usada para guardar la letra encriptada y hacerle los cmabios
    
    /*Las siguientes dos variables sirven para informar del avance en %
    El primero sirve para que cada 100000 repeticiones informe del % (para no consumir mucha CPU)
    El segundo es simplemente el numero de repeticiones que lleva */
    double long index2=0;
    double long index=0; 
    
    int ii=0; //Contador para la password
    int num2=1+rand()%(90-1); //Genera un segundo numero aleatorio
    int num=1+rand()%(90-1);
    ofstream salida;
    salida.open (str2,ios::binary); //Archivo de salida 
    
	//Bucle que se encarga de leer caracter por caracter y codificarlo y guardarlo en un archivo de salida
    while (index!=size)
    {
        
        if (index2==1000000) //Condicinoal que informa al usuario del avance cada 1000000 repeticiones del bucle
        {
            
            index2=0; 
            if (index*100/size >0) 
            {
                
                cout << index*100/size << " %" << endl; // Calculo del %
                
            }
            
            
        }
        
        
        //Aqui es la parte donde realmente se encripta todo
        if (entrada.good()) 
        {
            
	    letra = pass[ii] + num; //A la variable letra se le asigna el primer caracter de la password y se le suma un numero aleatorio (num)
            letra = letra + pass[ii]; //A la primera letra de la password se le suma otra vez la primera
	    clave += letra; //Se almacena este caracter en el archivo clave
	    mens = entrada.get(); //Se obtiene un caracter del archivo a cifrar
            letra = mens + num; //Al caracter se le suma un numero aleatorio
            letra = letra + pass[ii]; //Al resultado de la operacion anterior se le suma la password
            letra = letra - num2; //Al resultado anterior se le resta un numero aleatorio
            num=1+rand()%(90-1); //Genera un numero aleatorio
            mens2 += letra + num2; //Se almacena el caracter encriptado en mens2 
	    num2=1+rand()%(200-1); //Genera un numero aleatorio
			salida << mens2; //Se guarda la letra encriptada en el archivo
            
            mens2=""; //Se devuelve mens2 a un valor nulo, esto es así por que si el texto es largo al final el string peta y genera un error
			ii++; //Se le suma 1 a ii lo que hara que pase a operar con el segundo caracter de la password
			if (pass.size()==unsigned(ii)) {ii=0;} //Si la password ya no tiene más caracteres vuelve al inicio
        }
        
        index2++; 
        index++;
        
    }
    
    entrada.close(); 
    salida.close();
    salida.open ("CLAVE.txt",ios::binary); //Se guarda la clave en el archivo
    salida << clave;
    salida.close();
    cout << endl << endl;
    cout << "TEXTO GUARDADO EN " << str2 << endl;
    return 0;
    
}

//Esta funcion desencripta el text
int RCR1M2 (char str[256], int argc, string pass, char str2[256])
{
    string clave;
    char mens;
    char letra;
    char nu;
    long i=0;
    double long index=0;
	int index2=0; //Variable usada para mostrar los %
	int ii=0;
	int num=1+rand()%(90-1);

	
	//Si argc es mayor de 2 significa que el usuario ya inserto el nombre del archivo por lo tanto no le tenemos que volver a pedir
   if (argc > 3) {} else {		cout  << endl<< "INTRODUZCA LA PASSWORD ";cin >> pass;}   
   if (argc > 2)
    {
        
    }
    else
    {
        
        cout << "NOMBRE DEL ARCHIVO DE TEXTO A DESENCRIPTAR: ";cin.get();cin.get (str,256);
    }
	

	
    cout << endl << endl<< "PUEDE TARDAR SEGUNDOS DEPENDIENDO DE LA LONGITUD DEL ARCHIVO" << endl << endl;
	

    ifstream entradas;
    entradas.open (str,ios::binary);  
	    if (!entradas)
    {
        cout << endl << endl << "ERROR EN EL ARCHIVO";return 0;
    }
    entradas.seekg(0, ios::end);
    double long sizee= entradas.tellg();
    entradas.seekg(0, ios::beg);
    entradas.close();
    entradas.open (str,ios::binary);  
    index=0;
    ofstream salida;
    salida.open (str2,ios::binary);
    ifstream clabe;
    clabe.open ("CLAVE.txt",ios::binary);  
    index2=0;
	
	//Bucle encargado de desencriptar el texto
    while (index<sizee*2)
    {
        
        index2++;
        if (index2==500000)
        {
            
            index2=0;
            if (index*100/sizee >0)
            {
                
                cout << index*100/sizee << " %" << endl;
                
            }
            
            
        }
        
        i=0; index++;
        mens = clabe.get();
        letra=mens - pass[ii];
        while (nu!=pass[ii])
        {
            
            i++;
            nu = letra - i;
            
        }
        
        nu ='\0';
        mens = entradas.get();
        letra = mens - pass[ii];
        letra = letra - i;
        salida << letra;
        letra = letra + mens;
        index++;
		ii++;
        if (pass.size()==unsigned(ii)) {ii=0;}
    }
    
    salida.close();
    clabe.close();
	entradas.close();
	cout << "ARCHIVO GUARDADO EN " << str2;
	//remove( "CR1M2-temp.txt");
    cout << endl <<endl;
    return 0;
    
}

int main(int argc,char* argv[])

{
    string pass;
    int opcion;
    char str[256], str2[256]; //Variable que guarda el nombre del archivo

	if (argc>1) {if (strcmp(argv[1], "-h") == 0){
	cout << endl << "cr1m2.exe [opcion ] [archivo] [password] [archivo salida(opcional)]" << endl << endl << "opcion = 1 Encriptar    2 Desencriptar" << endl ;return 0;};}
	if (argc > 1 && argc < 3) {cout << "FALTAN PARAMETROS";return 0;};
    if (argc > 1)
    {
        
        opcion = atoi(argv[1]);
        if (opcion==1)
        {
            
            strcpy( str, argv[2]);
			pass = argv[3];
				if (argc<5) {
			strcpy( str2, "CIFRADO-cr1m2.txt");
			} else  {
			strcpy( str2, argv[4]);
			}
            CR1M2(str, argc, pass,str2);
            
        }
        
        if (opcion==2)
        {
            
            strcpy( str, argv[2]);
			pass = argv[3];
			if (argc<5) {
			strcpy( str2, "DESCIFRADO-cr1m2.txt");
			} else  {
			strcpy( str2, argv[4]);
			}
            RCR1M2(str, argc, pass,str2);
            
        }
        
        
    }
    else
    {
        
        cout << "1.ENCRIPTAR" << endl << "2.DESENCRIPTAR"<< endl<<endl<<">>";
        cin >> opcion;
        switch(opcion)
        {
            
            strcpy( str, "");
            case 1:strcpy( str2, "CIFRADO-cr1m2.txt");CR1M2(str, argc, pass, str2);
            break;
            case 2:strcpy( str2, "DESCIFRADO-cr1m2.txt");RCR1M2(str, argc, pass , str2);
            
        }
        
        
    }
    
    
} 


Output:
1
2
3
4
1.ENCRIPTAR
2.DESENCRIPTAR

>>


Create a new paste based on this one


Comments:
posted by puntoinfinito on Feb 21
hay errores de identificación
reply
posted by puntoinfinito on Feb 21
pero bueno, va bien y se nota el trabajo
reply