AJDERNIZ
Práctica: cifrado de Vigenere
Trampa
Me dio pereza hacer el cifrado a mano, entonces escribí un programa en C
para hacerlo automáticamente.
#include
#include /* calloc */
#include /* strlen */
int main(int argc, char **argv) {
int alphabet_size;
int index;
int key_index;
size_t message_length;
size_t key_length;
char *message = NULL;
char *key = NULL;
char *encrypted_message = NULL;
if (argc != 3) {
puts("Not enough arguments");
return EXIT_FAILURE;
}
alphabet_size = ('Z' - 'A') + 1;
message = argv[1];
message_length = strlen(message);
for (index = 0; index < message_length; index++) {
if (message[index] < 'A' || 'Z' < message[index]) {
if (message[index] != ' ') {
puts("Invalid message");
return EXIT_FAILURE;
}
}
}
key = argv[2];
key_length = strlen(key);
for (index = 0; index < key_length; index++) {
if (key[index] < 'A' || 'Z' < key[index]) {
puts("Invalid key");
return EXIT_FAILURE;
}
}
encrypted_message = calloc(sizeof(char), message_length + 1);
if (NULL == encrypted_message) {
puts("Could not allocate encrypted_message");
return EXIT_FAILURE;
}
puts("M K E");
puts("=====");
for(index = 0, key_index = 0; index < message_length;
index++, key_index = (key_index + 1) % key_length) {
if (' ' == message[index]) {
encrypted_message[index] = message[index];
puts("");
index++;
}
encrypted_message[index] =
(message[index] + key[key_index]) % alphabet_size + 'A';
printf("%c %c %c\n", message[index], key[key_index],
encrypted_message[index]);
}
encrypted_message[message_length] = '\0';
printf("Message: %s\n", message);
printf("Key: %s\n", key);
printf("Encrypted: %s\n", encrypted_message);
free(encrypted_message);
return EXIT_SUCCESS;
}
Lista de mensajes para cifrar
-
-
Mensaje: LA SEGURIDAD ES IMPORTANTE
-
Clave: CLAVE
-
Cifrado: NL SZKWCIYEF PS DQRZROEPEE
-
-
Mensaje: LOS DATOS DEBEN ESTAR PROTEGIDOS
-
Clave: REDES
-
Cifrado: CSV HSKSV HWSIQ IKKEU TJFXHKAUSV
-
-
Mensaje: EL CIFRADO VIGENERE ES SEGURO
-
Clave: CIFRA
-
Cifrado: GT HZFTIIF VKOJEETM JJ SGOZIO
-
-
Mensaje: MANTENER LA INFORMACION SEGURA
-
Clave: SEGURIDAD
-
Cifrado: EETNVVHR OS MTZFZPAFAST MVOXRD
-
-
Mensaje: ENCRIPTAR LOS MENSAJES ES CLAVE
-
Clave: MENSAJE
-
Cifrado: QRPJIYXMV YGS VIZWNBEB IE GYSVN
-
-
Mensaje: LA INFORMACION PRIVADA ES VALIOSA
-
Clave: PRIVADO
-
Cifrado: AR QIFRFBRKDOQ DGZDVDD SH MIGIRGP
-
-
Mensaje: DEBEMOS USAR CLAVES SEGURAS SIEMPRE
-
Clave: PROTECCION
-
Cifrado: SVPXQQU CGNG TZTZGU ASTJIOL WKGUDET
-
-
Mensaje: LOS SISTEMAS DEBEN SER CONFIABLES
-
Clave: SEGURIDAD
-
Cifrado: DSY MZAWEPSW JYSMQ SHJ GUHWQDBOWW
-
-
Mensaje: EL INTERNET ES UN LUGAR PELIGROSO
-
Clave: CIBER
-
Cifrado: GT JRKGZOIK GA VR CWOBV GGTJKIQAP
-
-
Mensaje: LOS ATAQUES CIBERNETICOS SON FRECUENTES
-
Clave: DEFENSA
-
Cifrado: OSX EGSQXIX GVTEURJXVUOV WTR SJEFYJRGWS
Me dio pereza hacer el cifrado a mano, entonces escribí un programa en C para hacerlo automáticamente.
#include#include /* calloc */ #include /* strlen */ int main(int argc, char **argv) { int alphabet_size; int index; int key_index; size_t message_length; size_t key_length; char *message = NULL; char *key = NULL; char *encrypted_message = NULL; if (argc != 3) { puts("Not enough arguments"); return EXIT_FAILURE; } alphabet_size = ('Z' - 'A') + 1; message = argv[1]; message_length = strlen(message); for (index = 0; index < message_length; index++) { if (message[index] < 'A' || 'Z' < message[index]) { if (message[index] != ' ') { puts("Invalid message"); return EXIT_FAILURE; } } } key = argv[2]; key_length = strlen(key); for (index = 0; index < key_length; index++) { if (key[index] < 'A' || 'Z' < key[index]) { puts("Invalid key"); return EXIT_FAILURE; } } encrypted_message = calloc(sizeof(char), message_length + 1); if (NULL == encrypted_message) { puts("Could not allocate encrypted_message"); return EXIT_FAILURE; } puts("M K E"); puts("====="); for(index = 0, key_index = 0; index < message_length; index++, key_index = (key_index + 1) % key_length) { if (' ' == message[index]) { encrypted_message[index] = message[index]; puts(""); index++; } encrypted_message[index] = (message[index] + key[key_index]) % alphabet_size + 'A'; printf("%c %c %c\n", message[index], key[key_index], encrypted_message[index]); } encrypted_message[message_length] = '\0'; printf("Message: %s\n", message); printf("Key: %s\n", key); printf("Encrypted: %s\n", encrypted_message); free(encrypted_message); return EXIT_SUCCESS; }
-
- Mensaje: LA SEGURIDAD ES IMPORTANTE
- Clave: CLAVE
- Cifrado: NL SZKWCIYEF PS DQRZROEPEE
-
- Mensaje: LOS DATOS DEBEN ESTAR PROTEGIDOS
- Clave: REDES
- Cifrado: CSV HSKSV HWSIQ IKKEU TJFXHKAUSV
-
- Mensaje: EL CIFRADO VIGENERE ES SEGURO
- Clave: CIFRA
- Cifrado: GT HZFTIIF VKOJEETM JJ SGOZIO
-
- Mensaje: MANTENER LA INFORMACION SEGURA
- Clave: SEGURIDAD
- Cifrado: EETNVVHR OS MTZFZPAFAST MVOXRD
-
- Mensaje: ENCRIPTAR LOS MENSAJES ES CLAVE
- Clave: MENSAJE
- Cifrado: QRPJIYXMV YGS VIZWNBEB IE GYSVN
-
- Mensaje: LA INFORMACION PRIVADA ES VALIOSA
- Clave: PRIVADO
- Cifrado: AR QIFRFBRKDOQ DGZDVDD SH MIGIRGP
-
- Mensaje: DEBEMOS USAR CLAVES SEGURAS SIEMPRE
- Clave: PROTECCION
- Cifrado: SVPXQQU CGNG TZTZGU ASTJIOL WKGUDET
-
- Mensaje: LOS SISTEMAS DEBEN SER CONFIABLES
- Clave: SEGURIDAD
- Cifrado: DSY MZAWEPSW JYSMQ SHJ GUHWQDBOWW
-
- Mensaje: EL INTERNET ES UN LUGAR PELIGROSO
- Clave: CIBER
- Cifrado: GT JRKGZOIK GA VR CWOBV GGTJKIQAP
-
- Mensaje: LOS ATAQUES CIBERNETICOS SON FRECUENTES
- Clave: DEFENSA
- Cifrado: OSX EGSQXIX GVTEURJXVUOV WTR SJEFYJRGWS