Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 22-10-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Asi he dejado el codigo:
Main.cpp:
Código PHP:
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream.h>
#include "Vigenere.h"
//---------------------------------------------------------------------------

using namespace std;

void InfoUso();
void Desencriptar(char *nameFileInchar *semillachar *nameFileOut);
void Encriptar(char *nameFileInchar *semillachar *nameFileOut);

int main(int argcchar *argv[])
{
   if(
argc == 5){
      if(
argv[1][0] == 'e' && argv[1][1] == '\0'){
         
Encriptar(argv[2],argv[3],argv[4]);
         
cout << "Operacion finalizada." << endl;
      }else if(
argv[1][0] == 'd' && argv[1][1] == '\0'){
         
Desencriptar(argv[2],argv[3],argv[4]);
         
cout << "Operacion finalizada." << endl;
      }else{
         
cout << "Opcion no valida." << endl;
         
InfoUso();
      }
   }else if(
argc<5){
      
cout << "Faltan argumentos." << endl;
      
InfoUso();
   }else{
      
cout << "Sobran argumentos." << endl;
      
InfoUso();
   }
   return 
0;
}

void InfoUso()
{
   
cout << "Vigenere.exe [operacion] [archivo] [semilla]" << endl;
   
cout << "operacion: 'd' desencriptar. 'e' encriptar." << endl;
   
cout << "archivo: ruta completa del archivo o solo el nombre si esta junto a este ejecutable." << endl;
   
cout << "semilla: la cadena que va a ser usada como semilla para encriptar/desencriptar el archivo." << endl;
}

//Funcion que encripta el archivo
void Encriptar(char *nameFileInchar *semillachar *nameFileOut)
{
   
ifstream origen;
   
ofstream salida;
   
char *cadena;

   
origen.open(nameFileIn,ios::binary);

   if(
origen.good()){
      
origen.seekg(0,ios::end);
      
int length origen.tellg();
      
origen.seekg(0,ios::beg);
      
cadena = new char[length+1];
      
Vigenere *vig = new Vigenere;
      
salida.open(nameFileOut,ios::binary ios::trunc);

      if(
salida.good()){
         
origen.read(cadena,length);
         
cadena[length]='\0';
         
salida.write(vig->cifrar(cadenasemilla).c_str(),length);
         
salida.close();
      }
      
delete vig;
      
delete(cadena);
      
origen.close();
   }
}

//Funcion que desencripta el archivo
void Desencriptar(char *nameFileInchar *semillachar *nameFileOut)
{
   
ifstream origen;
   
ofstream salida;
   
char *cadena;

   
origen.open(nameFileIn,ios::binary);

   if(
origen.good()){
      
origen.seekg(0,ios::end);
      
int length origen.tellg();
      
origen.seekg(0,ios::beg);
      
cadena = new char[length+1];
      
Vigenere *vig = new Vigenere;
      
salida.open(nameFileOut,ios::binary ios::trunc);

      if(
salida.good()){
         
origen.read(cadena,length);
         
cadena[length]='\0';
         
salida.write(vig->descifrar(cadenasemilla).c_str(),length);
         
salida.close();
      }
      
delete vig;
      
delete(cadena);
      
origen.close();
   }

Vigenere.h:
Código PHP:
//---------------------------------------------------------------------------
#ifndef VigenereH
#define VigenereH
//---------------------------------------------------------------------------
#include <cstring.h>

class Vigenere{
   private:
      
string texto,semilla,caracteresValidos;
      
string limpiar(string cadena);
      
//Las variables son privadas, el metodo limpiar
      //es privada ya que solo lo utilizan los otros
      //metodos para limpiar la entrada

   
public:
      
Vigenere();
      ~
Vigenere();
      
string cifrar(string origstring sem);
      
string descifrar(string origstring sem);
      
//Esto es publico porque es la unica forma de
      //accesar a los datos de la clase
};
//---------------------------------------------------------------------------
#endif 
Vigenere.h:
Código PHP:
/************************************************
*  Nombre : Vigenere.cpp                        *
*                                               *
*  Cifrado de cesar de sustitución multiple     *
*  por medio de sumas y restas del alfabeto     *
*                                               *
*  Fulapol                                      *
*  [email protected]                            *
*  my.opera.com/fulapol                         *
*                                               *
************************************************/

/************************************************
*                                               *
*  El Constructor que debe recibir la cadena a  *
*  tratar y la cadena semilla                   *
*                                               *
************************************************/
#include "Vigenere.h"

Vigenere::Vigenere(){
   
caracteresValidos "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚüÜ1234567890¿?¡!,;.:-_ \"\t\n\r\\<>(){}[]^çÇ=+*/&%$#@";
}

Vigenere::~Vigenere(){

}
/************************************************
*                                               *
*  El metodo cifrar, que regresa una cadena de  *
*  texto que solo despues de ser cifrada        *
*                                               *
************************************************/

string Vigenere::cifrar(string origstring sem){
   
string final;
   
unsigned int irotaciontotal;
   
int pospos2;
   
//Las variables serviran para registrar la posicion
   //de las letras y calcular la semilla

   
this->texto limpiar(orig);
   
this->semilla limpiar(sem);

   for(
i=0texto.length(); i++){
      
rotacion i%semilla.length();
      
pos caracteresValidos.find(texto.at(i));
      
pos2 caracteresValidos.find(semilla.at(rotacion));
      
total = (pos+pos2)%caracteresValidos.length();
      
//El total que marca la posicion de la letra y la
      //semilla sumadas

      
final.append(caracteresValidostotal1);
   }
   return final;
}

/************************************************
*                                               *
*  El metodo descifrar, que regresa una cadena  *
*  de texto que solo despues de ser descifrada  *
*                                               *
************************************************/

string Vigenere::descifrar(string origstring sem){
   
//La funcion es exactamente la misma que en el metodo
   //cifrar, solo que aqui las posiciones se restan para
   //eliminar la semilla del texto

   
string final;
   
unsigned int irotaciontotal;
   
int pospos2;

   
this->texto limpiar(orig);
   
this->semilla limpiar(sem);

   for(
i=0i<texto.length(); i++){
      
rotacion i%semilla.length();
      
pos caracteresValidos.find(texto.at(i));
      
pos2 caracteresValidos.find(semilla.at(rotacion));
      
total = (caracteresValidos.length() + pos pos2) % caracteresValidos.length();

      final.
append(caracteresValidostotal1);
   }
   return final;
}

/************************************************
*                                               *
*  El metodo limpiar, que regresa una cadena de *
*  texto que solo contiene los caracteres       *
*  soportados por la clase                      *
*                                               *
************************************************/

string Vigenere::limpiar(string cadena){
   
unsigned int i;
   
string final;
   for(
i=0cadena.length(); i++){
      if(
caracteresValidos.find(cadena.at(i)) != -1)
         final.
append(&cadena.at(i),1);
      
//Agregamos a la cadena final el caracter
      //si se encuentra en la variable letras
   
}
   return final;

Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
con FindComponent en una dll no compila aguml C++ Builder 3 30-12-2014 14:33:20
Pasar mi clase a una clase de 3 capas o lo mas parecido elarys OOP 2 07-04-2011 23:02:54
No compila FastReport Chogo Varios 3 18-06-2010 21:32:42
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
Mi aplicacion no compila Lizette Varios 2 08-11-2008 16:24:25


La franja horaria es GMT +2. Ahora son las 00:03:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi