Created
April 6, 2017 01:07
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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