Criptografía
 “κρύπτω krypto, «oculto» + γράφω graphos, «escribir» = «escritura oculta»”

Este curioso arte se avoca a cifrar y descifrar información mediante técnicas
especiales, con el fin de que un mensaje sólo pueda ser leído por la persona
a la que va dirigido.

Ahora veremos el desarrollo e implementación de un algoritmo de cifrado en
C++, empecemos con esta idea:
Vamos a sumar las representaciones numéricas del primer dígito de la clave
y el primer dígito del „texto en claro‟ (mensaje legible en la jerga de la
criptografía) obteniendo así el primer dígito del texto cifrado. Este proceso se
realiza de igual forma con todos los dígitos del archivo tal y como muestra la
imagen:




Ahora, vamos a implementar esto en un programa de C++:

// CIDESOFT/Fredy Rojas/codificador1.cpp
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<fstream>

using namespace std;

const int MAXNOMB = 255; //maximo de caracteres para el
nombre

int main()
{
    char archivo_original[MAXNOMB];
    char extension[10];
    char archivo_cifrado[MAXNOMB];
    char clave[255];
    char car;
    int ch;
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;
   ofstream archivo_out;

   archivo_in.open(archivo_original);
   archivo_out.open(archivo_cifrado);

    if (archivo_in.fail()) //verificar si se abrio con
exito
    {
       cout<<"El archivo no se puede abrir con exiton" 
       <<" verifique si el archivo en realidad existen";
       system("PAUSE");
       exit(1);
    }

    if (archivo_out.fail()) //verificar si se creo con
exito
    {
       cout<<"El archivo no se puede crear con exiton";
       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( ( ch = archivo_in.peek() ) != EOF )
   {
          archivo_in.get(car);
          car = car + clave[idc];
          if( idc == lon )
              idc = -1;
          idc++;
          archivo_out<<car;
}

     archivo_in.close();
     archivo_out.close();

    cout<<"nEl archivo ha sido cifrado
satisfactoriamenete."<<endl<<endl;

     system ("PAUSE");
     return 0;
}


Muy bien, esto ha sido el cifrado, veamos ahora descifrado, ya que es
simplemente el proceso inverso, solo les presento la idea y el código:




// CIDESOFT/Fredy Rojas/decodificador1.cpp
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<fstream>

using namespace std;

const int MAXNOMB = 255; //maximo de caracteres para el
nombre

int main()
{
    char archivo_original[MAXNOMB];
    char extension[10];
    char archivo_cifrado[MAXNOMB];
    char clave[255];
    char car;
    int ch;

    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;
   ofstream archivo_out;

   archivo_in.open(archivo_cifrado);
   archivo_out.open(archivo_original);

    if (archivo_in.fail()) //verificar si se abrio con
exito
    {
       cout<<"El archivo no se puede abrir con exiton" 
       <<" verifique si el archivo en realidad existen";
       system("PAUSE");
       exit(1);
    }

    if (archivo_out.fail()) //verificar si se creo con
exito
    {
       cout<<"El archivo no se puede crear con exiton";
       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( ( ch = archivo_in.peek() ) != EOF )
   {
          archivo_in.get(car);
          car = car - clave[idc];
          if( idc == lon )
              idc = -1;
          idc++;
          archivo_out<<car;
   }

   archivo_in.close();
archivo_out.close();

    cout<<"nEl archivo ha sido descifrado
satisfactoriamenete."<<endl<<endl;

     system ("PAUSE");
     return 0;
}


Este „codificador‟ y „decodificador‟ tratan el archivo a cifrar como un archivo
de texto, por ello es que solamente pueden cifrar y descifrar archivos de este
tipo.
Se puede implementar el mismo algoritmo en C++, pero tratando el archivo
a cifrar como un archivo binario, esto significa cifrar cada BIT del archivo sin
importar que sea texto o alguna otra codificación, lo que nos permitiría cifrar
absolutamente cualquier tipo de archivo („.txt‟, „.jpg‟, „.mp3‟, „.wmv‟, etc.)
¿Quieres saber cómo?, visita:
http://cidesoft.com.pe/blogs/integrantes/fredy-rojas-frants/

Más contenido relacionado

PPT
Procesos
DOCX
Ejemplos de llamadas al sistema
DOC
Codigo del metodo de ordenamiento Radixsort
DOCX
Reglas de producción
ODP
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
PDF
José Ramón Palanco - NoSQL Security [RootedCON 2011]
Procesos
Ejemplos de llamadas al sistema
Codigo del metodo de ordenamiento Radixsort
Reglas de producción
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
José Ramón Palanco - NoSQL Security [RootedCON 2011]

La actualidad más candente (19)

PDF
1.1 C2Ruby - ladrillos
PPTX
Doxygen
PDF
Openssl
PDF
Suma de numeros extensos con listas doblemente enlazadas
PPTX
Desde el DVR hasta la cocina
PDF
Configuracion
 
DOCX
Package contactos para java
DOCX
Cedula
RTF
Php slideshare
DOCX
PDF
Manejo de archivos
PPT
Introducción a Groovy
DOCX
Encriptación
TXT
Do while
PDF
PDF
Visual fox pro 9.0 y sqlserver 2005
PPTX
DOC
Trabajo Sandoval1
1.1 C2Ruby - ladrillos
Doxygen
Openssl
Suma de numeros extensos con listas doblemente enlazadas
Desde el DVR hasta la cocina
Configuracion
 
Package contactos para java
Cedula
Php slideshare
Manejo de archivos
Introducción a Groovy
Encriptación
Do while
Visual fox pro 9.0 y sqlserver 2005
Trabajo Sandoval1
Publicidad

Destacado (20)

PPS
Regras Dos Homens
PDF
Revista Renascidos em Pentecostes
PPT
El Carnaval en Europa
PPT
PPS
Aprendeaamardeverdad
PDF
Semanal audiencia y notoriedad sem49_2014
PPT
PPT
Mere
PDF
Poster de la 4. Fiesta de la Planta
DOCX
Modelo de diseño
PPS
Motivacion aceptame como_soy_np
PDF
Proyecto Eco Guadalinfo
PPTX
Mkt
PPTX
Partícula
DOC
Capitulo 26
PDF
Digital Sistemas O melhor sistema de gerenciamento Para Distribuidora Farma e...
ODP
PPTX
Presentaci+¦n2 gbi
Regras Dos Homens
Revista Renascidos em Pentecostes
El Carnaval en Europa
Aprendeaamardeverdad
Semanal audiencia y notoriedad sem49_2014
Mere
Poster de la 4. Fiesta de la Planta
Modelo de diseño
Motivacion aceptame como_soy_np
Proyecto Eco Guadalinfo
Mkt
Partícula
Capitulo 26
Digital Sistemas O melhor sistema de gerenciamento Para Distribuidora Farma e...
Presentaci+¦n2 gbi
Publicidad

Similar a criptografiaV1 (20)

DOCX
DOCX
Informe minishell
PDF
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
PDF
Lw2010 Pedro Valera
PPTX
Ficheros C++
PDF
7... automata de pila
PDF
ARCHIVOS_Dom.pdf
PDF
DOC
Unidad16 Codigof1
DOC
Ejemplos Importantisimo
PDF
Ej1 t2 l3-1
PDF
Practica 5
TXT
Coloreo de grafos
DOCX
Tutorial C++
PDF
Working with Files, Streams, and Serialization.pdf
PPT
Python Tutorial Presentation
PDF
Quasi - Practicas de Programacion en C
PDF
Los mejores trucos de Asterisk
DOCX
Cesar lenguaje c_
DOCX
Algoritmos Para Encriptar Claves
Informe minishell
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 Pedro Valera
Ficheros C++
7... automata de pila
ARCHIVOS_Dom.pdf
Unidad16 Codigof1
Ejemplos Importantisimo
Ej1 t2 l3-1
Practica 5
Coloreo de grafos
Tutorial C++
Working with Files, Streams, and Serialization.pdf
Python Tutorial Presentation
Quasi - Practicas de Programacion en C
Los mejores trucos de Asterisk
Cesar lenguaje c_
Algoritmos Para Encriptar Claves

Más de Leroy Merlin Tarragona (9)

PPT
Copia de Tarjeta de Presentacion
DOC
Francesc Pujols i Morgades  
PDF
ANÁLISIS POR ELEMENTOS FINITOS DE UN ENSAMBLE EN AUTODESK INVENTOR 2010
PPT
Tarjeta de Presentacion
PDF
autocandidatura revisada
PPT
DOC
DOC
PONT DEL DIABLE
Copia de Tarjeta de Presentacion
Francesc Pujols i Morgades  
ANÁLISIS POR ELEMENTOS FINITOS DE UN ENSAMBLE EN AUTODESK INVENTOR 2010
Tarjeta de Presentacion
autocandidatura revisada
PONT DEL DIABLE

criptografiaV1

  • 1. Criptografía “κρύπτω krypto, «oculto» + γράφω graphos, «escribir» = «escritura oculta»” Este curioso arte se avoca a cifrar y descifrar información mediante técnicas especiales, con el fin de que un mensaje sólo pueda ser leído por la persona a la que va dirigido. Ahora veremos el desarrollo e implementación de un algoritmo de cifrado en C++, empecemos con esta idea: Vamos a sumar las representaciones numéricas del primer dígito de la clave y el primer dígito del „texto en claro‟ (mensaje legible en la jerga de la criptografía) obteniendo así el primer dígito del texto cifrado. Este proceso se realiza de igual forma con todos los dígitos del archivo tal y como muestra la imagen: Ahora, vamos a implementar esto en un programa de C++: // CIDESOFT/Fredy Rojas/codificador1.cpp #include<iostream> #include<stdlib.h> #include<string.h> #include<fstream> using namespace std; const int MAXNOMB = 255; //maximo de caracteres para el nombre int main() { char archivo_original[MAXNOMB]; char extension[10]; char archivo_cifrado[MAXNOMB]; char clave[255]; char car; int ch;
  • 2. 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; ofstream archivo_out; archivo_in.open(archivo_original); archivo_out.open(archivo_cifrado); if (archivo_in.fail()) //verificar si se abrio con exito { cout<<"El archivo no se puede abrir con exiton" <<" verifique si el archivo en realidad existen"; system("PAUSE"); exit(1); } if (archivo_out.fail()) //verificar si se creo con exito { cout<<"El archivo no se puede crear con exiton"; 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( ( ch = archivo_in.peek() ) != EOF ) { archivo_in.get(car); car = car + clave[idc]; if( idc == lon ) idc = -1; idc++; archivo_out<<car;
  • 3. } archivo_in.close(); archivo_out.close(); cout<<"nEl archivo ha sido cifrado satisfactoriamenete."<<endl<<endl; system ("PAUSE"); return 0; } Muy bien, esto ha sido el cifrado, veamos ahora descifrado, ya que es simplemente el proceso inverso, solo les presento la idea y el código: // CIDESOFT/Fredy Rojas/decodificador1.cpp #include<iostream> #include<stdlib.h> #include<string.h> #include<fstream> using namespace std; const int MAXNOMB = 255; //maximo de caracteres para el nombre int main() { char archivo_original[MAXNOMB]; char extension[10]; char archivo_cifrado[MAXNOMB]; char clave[255]; char car; int ch; cout<<"Ingrese el nombre del archivo a descifrar(sin extension): "; cin>>archivo_cifrado;
  • 4. 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; ofstream archivo_out; archivo_in.open(archivo_cifrado); archivo_out.open(archivo_original); if (archivo_in.fail()) //verificar si se abrio con exito { cout<<"El archivo no se puede abrir con exiton" <<" verifique si el archivo en realidad existen"; system("PAUSE"); exit(1); } if (archivo_out.fail()) //verificar si se creo con exito { cout<<"El archivo no se puede crear con exiton"; 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( ( ch = archivo_in.peek() ) != EOF ) { archivo_in.get(car); car = car - clave[idc]; if( idc == lon ) idc = -1; idc++; archivo_out<<car; } archivo_in.close();
  • 5. archivo_out.close(); cout<<"nEl archivo ha sido descifrado satisfactoriamenete."<<endl<<endl; system ("PAUSE"); return 0; } Este „codificador‟ y „decodificador‟ tratan el archivo a cifrar como un archivo de texto, por ello es que solamente pueden cifrar y descifrar archivos de este tipo. Se puede implementar el mismo algoritmo en C++, pero tratando el archivo a cifrar como un archivo binario, esto significa cifrar cada BIT del archivo sin importar que sea texto o alguna otra codificación, lo que nos permitiría cifrar absolutamente cualquier tipo de archivo („.txt‟, „.jpg‟, „.mp3‟, „.wmv‟, etc.) ¿Quieres saber cómo?, visita: http://cidesoft.com.pe/blogs/integrantes/fredy-rojas-frants/