Sei sulla pagina 1di 4

Criptografa 2! Implementacin de un algoritmo capaz de encriptar cualquier tipo de archivo!

La idea es la misma que en el post anterior, solo que ahora en vez de cifrar carcter por carcter, lo haremos bit por bit, veamos: - Al momento de abrir el archivo, indicamos que se haga de forma binaria. - Dentro del while (el nico que hay) utilizamos archivo_in.read y archivo_out.write as como tambin una funcin llamada fusion cuya implementacin est al final, que tiene por objetivo hacer la codificacin del carcter en cuestin a nivel binario. El cifrado: // CIDESOFT/Fredy Rojas/codificador2.cpp #include<iostream> #include<stdlib.h> #include<string.h> #include<fstream> #include<stdio.h> using namespace std; const int MAXNOMB = 255; //maximo de caracteres para el nombre char* fusion(char *car,char clave); int main() { char archivo_original[MAXNOMB]; char extension[10]; char archivo_cifrado[MAXNOMB]; char clave[255]; char car[1]; cout<<"Ingrese el nombre del archivo a cifrar(sin extension): "; cin>>archivo_original; cout<<"Ingrese la extension del archivo a cifrar: "; cin>>extension; strcpy(archivo_cifrado,archivo_original); strcat(archivo_original,"."); strcat(archivo_original,extension); strcat(archivo_cifrado,".cifx"); ifstream archivo_in(archivo_original, ios::binary);

ofstream archivo_out(archivo_cifrado, ios::binary); if (archivo_in.fail()) //verificar si se abrio con exito { cout<<"El archivo no se puede abrir con exito\n" \ <<" verifique si el archivo en realidad existe\n"; system("PAUSE"); exit(1); } if (archivo_out.fail()) //verificar si se creo con exito { cout<<"El archivo no se puede crear con exito\n"; system("PAUSE"); exit(1); } cout<<"Ingrese clave: "; cin>>clave; cout<<endl<<endl; int idc; //indice de la ubicacion de la letra de la clave idc=0; int lon; //longitud de la clave lon = strlen(clave)-1; while( !archivo_in.eof() && !archivo_in.fail() ) { archivo_in.read(car, sizeof(car)); strcpy(car,fusion(car,clave[idc])); if( idc == lon ) idc = -1; idc++; if(!archivo_in.eof()) archivo_out.write(car,1); } archivo_in.close(); archivo_out.close(); cout<<"\nEl archivo ha sido cifrado satisfactoriamenete."<<endl<<endl; system ("PAUSE"); return 0; } char* fusion(char *car,char clave) { char c=car[0]+ clave;

car[0]=c; car[1]='\0'; return car; } Ahora, sin ms que explicar, el proceso inverso que es el descifrado: // CIDESOFT/Fredy Rojas/decodificador2.cpp #include<iostream> #include<stdlib.h> #include<string.h> #include<fstream> using namespace std; const int MAXNOMB = 255; //maximo de caracteres para el nombre char* fusion(char *car,char clave); int main() { char archivo_original[MAXNOMB]; char extension[10]; char archivo_cifrado[MAXNOMB]; char clave[255]; char car[1]; cout<<"Ingrese el nombre del archivo a descifrar(sin extension): "; cin>>archivo_cifrado; cout<<"Ingrese la extension del archivo original: "; cin>>extension; strcpy(archivo_original,archivo_cifrado); strcat(archivo_original,"."); strcat(archivo_original,extension); strcat(archivo_cifrado,".cifx"); ifstream archivo_in(archivo_cifrado, ios::binary); ofstream archivo_out(archivo_original, ios::binary); if (archivo_in.fail()) //verificar si se abrio con exito { cout<<"El archivo no se puede abrir con exito\n" \ <<" verifique si el archivo en realidad existe\n"; system("PAUSE"); exit(1); } if (archivo_out.fail()) //verificar si se creo con exito { cout<<"El archivo no se puede crear con exito\n"; system("PAUSE");

exit(1); } cout<<"\nIngrese clave: "; cin>>clave; cout<<endl<<endl; int idc; //indice de la ubicacion de la letra de la clave idc=0; int lon; //longitud de la clave lon = strlen(clave)-1; while( !archivo_in.eof() && !archivo_in.fail() ) { archivo_in.read(car, sizeof(car)); strcpy(car,fusion(car,clave[idc])); if( idc == lon ) idc = -1; idc++; if(!archivo_in.eof()) archivo_out.write(car,1); } archivo_in.close(); archivo_out.close(); cout<<"\nEl archivo ha sido descifrado satisfactoriamenete."<<endl<<endl; system ("PAUSE"); return 0; } char* fusion(char *car,char clave) { char c=car[0]- clave; car[0]=c; car[1]='\0'; return car; } Pues bien, ahora porque no lo pruebas? Vamos, compila el cdigo y encripta esa foto tuya levantndote de la cama que quieres conservar de recuerdo pero no quieres que nadie vea! O las grabaciones de tus intentos de cantar para que nadie los vaya a escuchar? ^^ (Una vez que tienes el archivo cifrado no te olvides de borrar el archivo original!)

Potrebbero piacerti anche