Cifrado César en C++
Versión en C++ del algoritmo de cifrado César, programada por mí.
/**************************************** @---------------------------------- @ Autor original: [p3ll3] @ Version original: Java @ Autor modificacion: .:WindHack:. @ Version modificacion: C++ @ Sitio web: - http://daw-labs.com - http://foro.code-makers.net @---------------------------------- *****************************************/ #include <iostream> #include <string> using namespace std; /* Declaracion de variables.. El abecedario que usaremos para el cifrado. */ char Abecedario[]={'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'}; string Palabra,NuevaPalabra = ""; unsigned int i,x,ALength,Temp,Tmp,Clave = 0; /* Funcion para convertir una cadena de texto a minusculas. */ string StringToLower(string strToConvert) { for(unsigned int i=0;i < strToConvert.length();i++) { strToConvert[i] = tolower(strToConvert[i]); } return strToConvert; } /* Instancia principal de la aplicacion. */ int main() { cout << "Escriba la palabra que desea cifrar > "; /* Pedimos la palabra */ cin >> Palabra; /* La recibimos y guardamos en la variable "Palabra". */ Palabra = StringToLower(Palabra); /* La convertimos a minusculas. */ ALength = strlen(Abecedario); /* Obtenemos la longitud del abecedario */ cout << "Escriba la clave para codificar (entre 1 y 24) > ";/* Pedimos la clave de cifrado. */ cin >> Clave; /* La recibimos y guardamos en la varible "Clave". */ if ((Clave >= 1) & (Clave <= 26)){ /* Confirmamos si es correcta...*/ for (i = 0; i < Palabra.length(); i++){ /* Recorremos la palabra hasta el final. */ for (x = 0; x < ALength - 1; x++){ /* Recorremos el abecedarios. */ if (Palabra[i] == Abecedario[x]){ /* Buscamos caracteres que estén en ambos. */ if (x+Clave >= 26){ Temp = x+Clave; Tmp = Temp-26; NuevaPalabra = NuevaPalabra + Abecedario[Tmp]; /* Creando la palabra. */ }else NuevaPalabra = NuevaPalabra + Abecedario[x+Clave]; /* Creando la palabra. */ } } } }else cout << "Clave errónea"; cout << "La palabra cifrada es " << NuevaPalabra; /* Muestro la palabra cifrada. */ getchar(); return 0; }
Una alternativa un poco más cómoda:
/* =================================== @Autor: .:WindHack:. @Sitio web: http://daw-labs.com @Fecha: vie 2 de jul, 20:52 @Cifrado César =================================== */ #include <iostream> #include <string.h> #define MAX 128 using namespace std; int main() { int Key; char Temp[MAX]="",Cadena[MAX]; cout << "Introduce la cadena a cifrar: "; cin >> Cadena; cout << "Introduce la clave de desplazamiento (número): "; cin >> Key; for(int i=0;i<strlen(Cadena);i++) Temp[i] = Cadena[i]+Key; cout << "Cadena cifrada: " << Temp; return 0; }
| Este artículo fue publicado por WindHack el 24 mayo, 2010 a las 9:06 PM, y está archivado en C/C++, Criptografía/Esteganografía, Programación. Sigue las respuestas a esta entrada a través de RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio. |









hace 1 año
Y si hay una “Z” en la cadena y quiero darle un corrimiento de 3 por ejemplo. La “Z” tendria que brincar hacia la letra C pero con tu codigo no hace eso. A que se debe o como se soluciona ese error????????
hace 1 año
Hola mike.
Sí, es cierto el pequeño «error», la cuestión es que el código sigue de corrido la tabla ASCII. Así que si termina en la Z cuyo valor es: 90 le suma las otras tres posiciones y nos retorna como valor 93 que equivale a: ]
Ahora, una posible solución es crear una función que depure la cadena, con las letras que se ven afectada, que son prácticamente la X,Y,Z (x,y,z)
Saludos,
hace 1 año
Hola, muy interesante el ejemplo, tengomque hacer esto mismo pero en actionscript 2, alguien sabe como?
Saludos
hace 1 año
¡Muchas gracias!, la verdad que no sé cómo sería en ActionScript ya que nunca lo he manejado pero si tienes algún avance podrías enviarme el código por medio del servicio que tenemos disponible: “Envía tu artículo”.
Adèu.,
hace 1 año
Oby wiecej takich artykulow…
hace 1 año
Super artykul!!!
hace 7 meses
de lujo brother jala exelente, una pregunta no tendras el decifrador,? te lo agradeceria y en lo que pudiera ayudarte
hace 7 meses
Hola vidal,
Mira, para descifrar, solamente debes de restarle la clave al cifrado.
En el código está esta parte:
Temp[i] = Cadena[i]+Key;Cámbiala por:
Temp[i] = Cadena[i]-Key;Saludos.,
hace 6 meses
I really like this blog about full movie online. Many of websites on the net are just full of crap, but this one is very informative.
hace 1 mes
Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates. I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.