elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 09:40  


Tema destacado:


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: APOKLIPTICO)
| | | |-+  Ayuda programadores!! Vigenere!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda programadores!! Vigenere!  (Leído 2,153 veces)
aeternus_123

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Ayuda programadores!! Vigenere!
« en: 25 Noviembre 2009, 18:47 »

Que tal amigos! pues verán, me han dejado en la escuela hacer un código que cifre una palabra y la descifre por medio de la tabla de Vigenere. Logré hacer que la cifre, pero no logro hacer que la descifre. Se supone que es con la operación contraria, pero no veo que operación tengo que hacer contraria. Necesito su ayuda! Necesito que me ayudan a modificar el programa para que descifre la palabra! Les pongo el código y por favor díganme como le hago! gracias!

Código
#include <stdio.h> 
#include <string.h>
#include <conio.h>
 
int main(){
 
char abecedario[] = "abcdefghijklmnopqrstuvwxyz"; //arreglo a-z
char clave[]="pacopacopacopaco"; //palabra clave, se repite varias veces para que se acople al texto original
char texto[30]; //palabras a cifrar, el usuario la proporcionará.
int valor; //variable auxiliar
char Salida; //variable para salida
 
printf("\nBienvenido a Cripteame. Este es un programa que cifra una palabra que tu\nproporciones con una clave que ya esta en el sitema\nPor favor, presiona Enter para continuar\n";
getch();//Damos la bienvenida al programa
 
do{//iniciamos in ciclo do-while que permite seguir cifrando palabras
 
printf("\n\n\tDame el mensaje en claro, en minusculas y sin espacios,\n\tdespués, presiona Enter para continuar ";
gets(texto);//con gets, guardamos la cadena de caracteres
getch();
printf("\n\tEl cifrado es: ";
 
for(int ix = 0, iy = 0; ix < strlen(texto); ix++) //se inicia el ciclo de cifrado, con strlen se calcula el numero de caracteres
{
for(int ix2 = 0 ; ix2 < 26; ix2++)
{
if( abecedario[ix2] == clave[iy] ) // aqui encontramos la posicion de la fila respecto a la letra de la clave "paco"
{
for(int px = 0; px < 26; px++)
{
if(abecedario[px] == texto[iy])
{
valor = (int) abecedario[ix2]; //transformamos el valor de letra a entero con la variable extra
for(int px2 = 0; px2 <= px; px2++)
{
if(valor > 122) //segun el código ascii, a=97, z=122 por lo tanto, si el valor es menor de 122, se empieza de nuevo en la linea de abajo
valor = 97; //empezamos de nuevo con a=97
valor++;
}
 
printf("%c",(char) valor-1); //transformamos el entero a caracter y le restamos 1, si lo dejamos sin restar, el se considerara una fila despues, por eso se le resta uno, si queremos criptar b, y no restamos, se considerara la c, no la b
}
}
++iy;
}
}
}
printf("\n");
 
printf("\nAhora te presentamos la tabla de Vigenere: \n");
printf("\nA 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\nB C D E F G H I J K L M N O P Q R S T U V W X Y Z A");
printf("\nC D E F G H I J K L M N O P Q R S T U V W X Y Z A B\nD E F G H I J K L M N O P Q R S T U V W X Y Z A B C");
printf("\nF G H I J K L M N O P Q R S T U V W X Y Z A B C D E\nG H I J K L M N O P Q R S T U V W X Y Z A B C D E F");
printf("\nH I J K L M N O P Q R S T U V W X Y Z A B C D E F G\nI J K L M N O P Q R S T U V W X Y Z A B C D E F G H");
printf("\nJ K L M N O P Q R S T U V W X Y Z A B C D E F G H I\nK L M N O P Q R S T U V W X Y Z A B C D E F G H I J");
printf("\nL M N O P Q R S T U V W X Y Z A B C D E F G H I J K\nM N O P Q R S T U V W X Y Z A B C D E F G H I J K L");
printf("\nN O P Q R S T U V W X Y Z A B C D E F G H I J K L M\nO P Q R S T U V W X Y Z A B C D E F G H I J K L M N");
printf("\nP Q R S T U V W X Y Z A B C D E F G H I J K L M N O\nQ R S T U V W X Y Z A B C D E F G H I J K L M N O P");
printf("\nR S T U V W X Y Z A B C D E F G H I J K L M N O P Q\nS T U V W X Y Z A B C D E F G H I J K L M N O P Q R");
printf("\nT U V W X Y Z A B C D E F G H I J K L M N O P Q R S\nU V W X Y Z A B C D E F G H I J K L M N O P Q R S T");
printf("\nV W X Y Z A B C D E F G H I J K L M N O P Q R S T U\nW X Y Z A B C D E F G H I J K L M N O P Q R S T U V");
printf("\nX Y Z A B C D E F G H I J K L M N O P Q R S T U V W\nY Z A B C D E F G H I J K L M N O P Q R S T U V W X");
printf("\nZ 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\n");
 
printf("\n\n\tQuieres salir N/S?: ");//aqui el usuario puede decidir si quiere salir o no
 
Salida=_getche();
 
 
 
}while(Salida=='n'||Salida=='N');
 
}


Cópienlo en su compilador tal cual y córranlo, verán que puede cifrar perfectamente. Está compilado en dev c++. Tal vez no es el código más efecitvo, pero pues después de mucho buscar, logré hacer eso. El código tiene algunos comentarios de lo que se supone va haciendo el programa. Les agradeceré muchísimo su ayuda!




Gracias de nuevo!


« Última modificación: 26 Noviembre 2009, 03:17 por aeternus_123 » En línea
MasterPunk


Desconectado Desconectado

Mensajes: 442


(-A-)


Ver Perfil WWW
Re: Ayuda programadores!! Vigenere!
« Respuesta #1 en: 25 Noviembre 2009, 21:04 »

Si pones tu pregunta en el subforo de programación quizás te hagan mas caso...

Es posible que quien visite el subforo de criptografia no tenga ni idea de programación y no te pueda ayudar...


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con vigenére
Criptografía
Sk9ITk5Z 2 1,059 Último mensaje 13 Agosto 2011, 16:27
por Sk9ITk5Z
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines