Skip to content

Instantly share code, notes, and snippets.

@David256
Created April 6, 2017 01:07
Show Gist options
  • Save David256/a0ba882df16f7dc5f2941a45342b7dac to your computer and use it in GitHub Desktop.
Save David256/a0ba882df16f7dc5f2941a45342b7dac to your computer and use it in GitHub Desktop.
Nada que ver, sólo es un programa que descrifa una cadena usando recurvisidad.
/**
* Software descrifador.
*
* Fuente:
* https://es.wikipedia.org/wiki/Cifrado_C%C3%A9sar
*
* Recurso:
* - https://repl.it/languages/cpp
* - http://www.cplusplus.com/reference/cstring/strcmp/ (no se usó al fin)
* - http://www.eis.uva.es/~fergay/III/enlaces/gdb.html
*/
#include <iostream>
#include <string.h>
// Tamaño de la lista de caracteres disponibles:
#define LEN 26
// Desplazamiento
#define PHI 3
// Tamaño del mensaje a descifrar
#define LIMITE 157
using namespace std;
/**
* Este método evalua si un carácter está en la lista
* de letras.
* @param caracter El caracter a buscar
* @param listado Lista de todos los caracteres
* @return `true` si está; `false` si no.
*/
bool esta_dentro(char caracter, char listado[])
{
for (int i=0; i<LEN; i++)
{
if (caracter==listado[i])
{
return true;
}
}
return false;
}
/**
* Retorna el lugar donde se encuentra un carácter.
* @param caracter Carácter a buscar
* @param listado Lista de todos los caracteres
* @return Lugar donde está ubicado el valor.
*/
int donde_esta(char caracter, char listado[])
{
int i;
for (i=0; i<LIMITE; i++)
{
if (caracter==listado[i])
return i;
}
return -1;
}
/**
* Función encargada de descrifar un mensaje.
* @param original Puntero char, donde guardaremos el resultado
* @param listado Lista de todos los caracteres disponible
* @param cifrado Mensaje oculto en una lista de caracteres
* @param indice desplazamiento en `cifrado`.
*/
void descifrar(char * original, char listado[], char cifrado[], int indice)
{
int lugar = donde_esta(cifrado[indice], listado);
if (indice == LIMITE)
{
char nueva[2];
nueva[1] = '\0';
strcat(original, nueva);
return;
}
if (lugar-PHI < 0)
{
lugar = LEN + (lugar-PHI);
}
else
{
lugar = lugar-PHI;
}
if (esta_dentro(cifrado[indice], listado))
{
char nueva[2];
nueva[0] = listado[lugar];
nueva[1] = '\0';
strcat(original, nueva);
}
else
{
char nueva[2];
nueva[0] = cifrado[indice];
nueva[1] = '\0';
strcat(original, nueva);
}
descifrar(original, listado, cifrado, ++indice);
}
int main(void)
{
char letra[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char cifrado[] = "VROR ORV TXH HQ GLJQLGDG KDBDQ ORJUDGR DOFDQCDU HO SRGHU UHTXHULGR, UHFLELUDQ GHVGH HO DELVPR OD OODYH SDUD HQFRQWUDU DO GLIXQWR, DO TXH GXHUPH HQ WLQLHEODV";
char * original = (char *) malloc(sizeof(char[256]));
descifrar(original, letra, cifrado, 0);
cout << original << endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment