codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#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); } } }
Private
[
?
]
Run code
Submit