elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda !! Cifrado vigenere
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda !! Cifrado vigenere  (Leído 1,480 veces)
Alejan_dro

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda !! Cifrado vigenere
« en: 25 Marzo 2019, 21:42 pm »

Necesito ayuda !! me piden hacer un programa que le pida al usuario ingresar una palabra y la cifre utilizando el cifrado de cesar, eso es lo que hice hasta el momento. ejemplo:
palabra que ingresa el usuario: maria
palabra cifrada: pduld

Ahora me pide que realice el cifrado vigenere mediante una función utilizando estas dos palabras.
Ejemplo:
Palabra: maria  //guardada en cadenaOriginal
Clave: pduld     //guardada en cadenaCifrada
Resultado que debo obtener: cemue

COMO REALIZO ESTE CIFRADO VIGENERE UTILIZANDO EL CODIGO ASCII

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define LONGITUD_DEL_ALFABETO 26
#define INICIO_DEL_ALFABETO_MAYUSCULAS 65
#define INICIO_DEL_ALFABETO_MINUSCULAS 97

#define LONGITUD_CADENA 3000
#define MOD(i, n) (i % n + n) % n //para calcular el modulo positivo.



const char *alfabetominusculas = "abcdefghijklmnopqrstuvwxyz",
         *ALFABETOMAYUSCULAS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";



//Declaracion de funciones.
void cifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento);
void descifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento);
int ord(char varCaracter);
void saltarLinea();
void limpiarPantalla();

//Implementacion de funciones.
void cifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento)
{
   int varIterador = 0;
   
   while(cadena[varIterador])
   {
      char varCaracterActual = cadena[varIterador];
      int varValorEnteroDe = ord(varCaracterActual);
      
      if (!isalpha(varCaracterActual))
      {
         destinoCadena[varIterador] = varCaracterActual;
         varIterador++;
         continue;
      }
      if (isupper(varCaracterActual))
      {
         destinoCadena[varIterador] = ALFABETOMAYUSCULAS[(varValorEnteroDe - INICIO_DEL_ALFABETO_MAYUSCULAS + desplazamiento) % LONGITUD_DEL_ALFABETO];
      }
      else
      {
         destinoCadena[varIterador] = alfabetominusculas[(varValorEnteroDe - INICIO_DEL_ALFABETO_MINUSCULAS + desplazamiento) % LONGITUD_DEL_ALFABETO];
      }
      varIterador++;
   }
}
void descifrarMensaje(char *cadena, char *destinoCadena, int desplazamiento)
{
   int varIterador = 0;
   
   while(cadena[varIterador])
   {
      char varCaracterActual = cadena[varIterador];
      int varValorEnteroDe = ord(varCaracterActual);
      
      if (!isalpha(varCaracterActual))
      {
         destinoCadena[varIterador] = varCaracterActual;
         varIterador++;
         continue;
      }
      if (isupper(varCaracterActual))
      {
         destinoCadena[varIterador] = ALFABETOMAYUSCULAS[MOD(varValorEnteroDe - INICIO_DEL_ALFABETO_MAYUSCULAS - desplazamiento, LONGITUD_DEL_ALFABETO)];
      }
      else
      {
         destinoCadena[varIterador] = alfabetominusculas[MOD(varValorEnteroDe - INICIO_DEL_ALFABETO_MINUSCULAS - desplazamiento, LONGITUD_DEL_ALFABETO)];
      }
      varIterador++;
   }
}

int ord(char varCaracter)
{
   return (int)varCaracter;
}
void saltarLinea()
{
   printf("\n");
}

void limpiarPantalla()
{
   system("cls");
}

//Funcion principal.
int main(void)
{
   char cadenaOriginal[LONGITUD_CADENA], cadenaCifrada[LONGITUD_CADENA], cadenaDescifrada[LONGITUD_CADENA];
   int varDesplazamiento;
   
   printf("\t\tIngrese el mensaje que desea cifrar[Utilice maximo %d caracteres]:  ", LONGITUD_CADENA - 1);
   fgets(cadenaOriginal, LONGITUD_CADENA, stdin);
   saltarLinea();
   
   printf("\t\tIngrese el factor de desplazamiento para el cifrado:  ");
   scanf("%d", &varDesplazamiento);
   //limpiarPantalla();
   saltarLinea();
   
   cifrarMensaje(cadenaOriginal, cadenaCifrada, varDesplazamiento);
   printf("\t\tEl mensaje cifrado es:  %s", cadenaCifrada);
   
   descifrarMensaje(cadenaCifrada, cadenaDescifrada, varDesplazamiento);
   printf("\t\tEl mensaje descifrado es:  %s", cadenaDescifrada);
   
   return 0;
}


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Ayuda !! Cifrado vigenere
« Respuesta #1 en: 26 Marzo 2019, 10:04 am »

Modifica tu funcion cifrarMensaje y la otra para que reciba un parametro adicional: varIterador.

Eliminala desde dentro de las funciones y no hagas un while dentro. Elimina ese ciclo dentro.

Haz el nuevo ciclo fuera, en el main, ese ciclo es tan grande como la palabra que quieres cifrar.

Ese ciclo pasa como parametro la palabra a cifrar, el indice del ciclo y usa como desplazamiento el caracter i-esimo de la palabra clave (modulo el largo de la palabra clave).


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sigamos con la historia: Cifrado Vigènere « 1 2 »
Criptografía
Aberroncho 10 16,992 Último mensaje 7 Octubre 2010, 20:40 pm
por Aberroncho
ayuda con vigenére
Criptografía
Sk9ITk5Z 2 4,290 Último mensaje 13 Agosto 2011, 16:27 pm
por Sk9ITk5Z
[Perl] Ejemplo de Cifrado Vigenere
Scripting
BigBear 0 2,000 Último mensaje 13 Diciembre 2014, 15:23 pm
por BigBear
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines