Encriptar un Mensaje en C++.Net

 

Fecha: 08/Dic/2004 (06/Dic/04)
Autor: Sergio --- [email protected]

 


Inicialmente encontre este ejemplo en VB6.0, la idea era traducirlo, lo malo es que en VB6.0 estava con las funciones Mid y InStr, que hasta ahora no las entiendo pero si C++ no tiene eso, C++ tiene su for, y su librería string.h, y ahi tu mismo eres.... bueno para los no han usado el C++.Net, solamente agregan un nuevo proyecto Consola, le ponen el nombre Encripta y listo, todo lo que quieren programar lo hacen en Encripta.cpp.

El programa de encriptacion consisten en que con una clave puedes encriptar la cadena que le mandas, y esa misma clave la usas para desencriptar el mensaje.

Generalmente siempre comento mis programa pero esta vez no lo hice por el sueño, pero dare una explicacion de algunas funciones que uso en el programa:

string.h -> libreria para el manejo de cadenas

strcat(des,ori) -> adhiere la cadena ori, a la cadena des: des="hola", ori="c++", entoces despues del strcat seria des="holac++"

strlen(cadena) -> cuenta el tamaño de la cadena

strcpy(des,ori) -> es el operador de asignacion de una cadena.

No se desesperen a continuacion el programa en C++

// Archivo de proyecto principal del proyecto de aplicaci´┐Żn VC++ 
// generado mediante el Asistente para aplicaciones.

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"

#using <mscorlib.dll>

using namespace System;

char *encriptaCadena(char *cadena, char *clave, int encripta);

int main()
{
   char cadena[50];
   char cadE[50];

   printf("ingrese una cadena: ");
   scanf("%s", &cadena);

   printf("\nla cadena ingresa fue: %s\n", cadena);


   strcpy(cadE, encriptaCadena(cadena,"clave",0));
   printf("\nla cadena encriptada es: %s\n", cadE);

   printf("\n la cadena desencriptada es: %s\n",encriptaCadena(cadE,"clave",1));


   getch();
   return 0;
}

char *encriptaCadena(char *cadena, char *clave, int encripta){

   char alfabetoB[100];
   char alfabetoC[100];
   char alfabeto[2][100];
   char strModificado[100];
   int alf2, i, pos;
   //char cad[50];
   // tu codigo

   strcpy(alfabetoB, "ae AEbcdfghijklmnopqrstuvwxyz0123456789BCDFGHIJKLMNOPQRSTUVWXYZ");
   strcpy(alfabetoC,  "potre42ASD7531sdfghjklFGHwq086JKLMNBiuyVCXZ QWERzxcvbnmaTYUIOP9");
   strcpy(alfabeto[0], "");
   strcpy(alfabeto[1], "");
   strcpy(strModificado, "");
   strcpy(alfabeto[encripta], alfabetoB);
   alf2 = (encripta + 1) % 2;

    switch  ( strlen(clave)%3 ) {
      case 0:
        strcpy(alfabeto[alf2], " AeEa"); break;
      case 1:
        strcpy(alfabeto[alf2], "E aeA"); break;
      case 2:
        strcpy(alfabeto[alf2], "e aEA"); break;
    }

   char cad[20];
   int apar1, apar2;
   for ( i =  0; i< strlen(clave) ; i++) {
      cad[0] = clave[i];
      cad[1] = '\0';
      apar1 = apar2 = -1;

      for ( int j=0 ; j<strlen(alfabeto[alf2]); j++)
         if ( alfabeto[alf2][j] == cad[0] ) {
            apar1 = 1;
            break;
         }

      for ( j=0 ; j<strlen(alfabetoB); j++)
         if ( alfabetoB[j] == cad[0] ) {
            apar2 = 1;
            break;
         }

      if ( apar1< 1 && apar2>=1 )
          strcat(alfabeto[alf2], cad);

   }


   apar1 = -1;
   for ( i = 0 ; i<strlen(alfabetoC) ; i++) {
      apar1 = -1;
      cad[0] = alfabetoC[i];
      cad[1] = '\0';

      for (int  j=0 ; j<strlen(alfabeto[alf2]) ; j++) {
            if ( cad[0] == alfabeto[alf2][j]) {
              apar1 = 1;
              break;
            }
      }

      if (apar1 < 1 )
         strcat(alfabeto[alf2], cad);
   }

   for ( i = 0 ; i<strlen(cadena) ; i++) {
      pos = -1;
      cad[0]  = cadena[i];
      cad[1] = '\0';

      for ( int j=0 ; j<strlen(alfabeto[0]) ; j++) {
         if ( cad[0] == alfabeto[0][j] ) {
           pos  = j;
           break;
         }
      }

      if (pos < 0 )
         strcat(strModificado, cad);
      else {
         cad[0] = alfabeto[1][pos];
         cad[1] = '\0';
         strcat(strModificado, cad);
      }
   }

   return strModificado;

}

P.D.:No olviden calificar este articulo, cualquier duda solo me escriben al mail.

 


ir al Ýndice

Fichero con el c´┐Żdigo de ejemplo: sergio_Encripta.zip - 9.72 KB