//-------------------------------------------------------------------------------------------------------------------------
//Título: EPI Crypter 1.0
//Autor: elprogramadorinformatico [EPI]
//Fecha: 03-01-2010
//
//Se puede distribuir libremente este código, siempre que se mantenga esta cabecera
//-------------------------------------------------------------------------------------------------------------------------
#pragma comment(lib,"shlwapi.lib")
#include <windows.h>
#include <shlwapi.h>
#include <stdio.h>
#include <iostream>
#include <locale>
void cifrar()
{
using namespace std;
//Para que nuestro programa se adapte al español
locale::global(locale("spanish"));
//Creamos un LPCSTR que tendrá la dirección del fichero
LPCSTR nombrefichero = (LPSTR)GlobalAlloc(GPTR,MAX_PATH);
//Escribimos el nombre del fichero
cout << "Escribe el nombre del fichero (ejemplo: C:\\fichero.txt):" << endl;
scanf("%s",nombrefichero);
cout << "Comprobando..." << endl;
Sleep(1000);
//Comprovamos si el fichero existe
if(PathFileExistsA(nombrefichero) == TRUE)
{
MessageBoxA(0,"El fichero se ha encontrado y se ha cifrado correctamente","Fichero encontrado",0);
}
else
{
MessageBoxA(0,"El fichero no se ha encontrado, vuélvelo a escribir y asegúrate de que existe","Fichero no encontrado",0);
system("CLS");
cifrar();
}
//Abrimos el fichero, abrirfichero es el HANDLE de archivo abierto, que utilizamos para trabajar con él
HANDLE abrirfichero = CreateFileA(nombrefichero,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
//Obtenemos el tamaño del archivo abierto, con un DWORD
DWORD tamaniofichero = GetFileSize(abrirfichero,0);
//Creamos un buffer que contendrá el contenido del archivo, con un LPSTR
LPSTR bufferfichero = (LPSTR)GlobalAlloc(GPTR,tamaniofichero);
//Leemos el archivo, metiendo el contenido en bytesfichero, con un DWORD
DWORD bytesfichero;
ReadFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0);
//Sumamos 13 (sistema ROT13) a todos los caracteres
for(DWORD caracteresfichero = 0;caracteresfichero < tamaniofichero;caracteresfichero++)
{
bufferfichero[caracteresfichero] = bufferfichero[caracteresfichero] + 13;
}
//Borramos los carácteres iniciales del fichero
SetFilePointer(abrirfichero,FILE_BEGIN,0,0);
//Sobreescribimos los nuevos carácteres
BOOL sobreescribirfichero = WriteFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0);
//Cerramos el fichero
CloseHandle(abrirfichero);
//Creamos un char, para preguntar si queremos volver a cifrar
char pregunta2;
cout << "¿Quiéres volver a cifrar otro fichero? (s/n):" << endl;
cin >> pregunta2;
//Con la función switch(), decidimos que hacer
switch(pregunta2)
{
case 's':
system("CLS");
cifrar();
break;
case 'S':
system("CLS");
cifrar();
break;
case 'n':
cout << endl;
cout << "Gracias por utilizar: EPI Crypter 1.0" << endl;
getchar();
break;
case 'N':
cout << endl;
cout << "Gracias por utilizar: EPI Crypter 1.0" << endl;
getchar();
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
cifrar();
break;
}
//Damos una pausa y cerramos el programa
getchar();
}
void descifrar()
{
using namespace std;
//Para que nuestro programa se adapte al español
locale::global(locale("spanish"));
//Creamos un LPCSTR que tendrá la dirección del fichero
LPCSTR nombrefichero = (LPSTR)GlobalAlloc(GPTR,MAX_PATH);
//Escribimos el nombre del fichero
cout << "Escribe el nombre del fichero (ejemplo: C:\\fichero.txt, y sólo se pueden descifrar ficheros cifrados en ROT13):" << endl;
scanf("%s",nombrefichero);
cout << "Comprobando..." << endl;
Sleep(1000);
//Comprovamos si el fichero existe
if(PathFileExistsA(nombrefichero) == TRUE)
{
MessageBoxA(0,"El fichero se ha encontrado y se ha descifrado correctamente","Fichero encontrado",0);
}
else
{
MessageBoxA(0,"El fichero no se ha encontrado, vuélvelo a escribir y asegúrate de que existe","Fichero no encontrado",0);
system("CLS");
descifrar();
}
//Abrimos el fichero, abrirfichero es el HANDLE de archivo abierto, que utilizamos para trabajar con él
HANDLE abrirfichero = CreateFileA(nombrefichero,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
//Obtenemos el tamaño del archivo abierto, con un DWORD
DWORD tamaniofichero = GetFileSize(abrirfichero,0);
//Creamos un buffer que contendrá el contenido del archivo, con un LPSTR
LPSTR bufferfichero = (LPSTR)GlobalAlloc(GPTR,tamaniofichero);
//Leemos el archivo, metiendo el contenido en bytesfichero, con un DWORD
DWORD bytesfichero;
ReadFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0);
//Restamos 13 (sistema ROT13) a todos los caracteres
for(DWORD caracteresfichero = 0;caracteresfichero < tamaniofichero;caracteresfichero++)
{
bufferfichero[caracteresfichero] = bufferfichero[caracteresfichero] - 13;
}
//Borramos los carácteres iniciales del fichero
SetFilePointer(abrirfichero,FILE_BEGIN,0,0);
//Sobreescribimos los nuevos carácteres
BOOL sobreescribirfichero = WriteFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0);
//Cerramos el fichero
CloseHandle(abrirfichero);
//Creamos un char, para preguntar si queremos volver a descifrar
char pregunta2;
cout << "¿Quiéres volver a descifrar otro fichero? (s/n):" << endl;
cin >> pregunta2;
//Con la función switch(), decidimos que hacer
switch(pregunta2)
{
case 's':
system("CLS");
descifrar();
break;
case 'S':
system("CLS");
descifrar();
break;
case 'n':
cout << endl;
cout << "Gracias por utilizar: EPI Crypter 1.0" << endl;
getchar();
break;
case 'N':
cout << endl;
cout << "Gracias por utilizar: EPI Crypter 1.0" << endl;
getchar();
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
descifrar();
break;
}
}
int main() {
using namespace std;
//Para que nuestro programa se adapte al español
locale::global(locale("spanish"));
//Creamos un char, para preguntar que queremos hacer
char pregunta1;
cout << "¿Qué deseas hacer? Para cifrar pulse: a; para descifrar (ficheros cifrados en ROT13) pulse: b; para salir pulse: c:" << endl;
cin >> pregunta1;
//Con la función switch(), decidimos que hacer
switch(pregunta1)
{
case 'a':
system("CLS");
cifrar();
break;
case 'A':
system("CLS");
cifrar();
break;
case 'b':
system("CLS");
descifrar();
break;
case 'B':
system("CLS");
descifrar();
break;
case 'c':
cout << endl;
cout << "Gracias por utilizar: EPI Crypter 1.0" << endl;
getchar();
return 0;
break;
case 'C':
cout << endl;
cout << "Gracias por utilizar: EPI Crypter 1.0" << endl;
getchar();
return 0;
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
main();
break;
}
}