Tracks
/
Pharo
Pharo
/
Ejercicios
/
Cifrado simple
Cifrado simple

Cifrado simple

Intermedia

Instrucciones

Implementa un cifrado de desplazamiento simple, como el César, y un cifrado por sustitución más seguro.

Paso 1

«Si tenía algo confidencial que decir, lo escribía en cifrado, es decir, cambiando el orden de las letras del alfabeto, de modo que no se pudiera entender ni una palabra. Si alguien quiere descifrarlo y entender su significado, debe sustituir la cuarta letra del alfabeto, la D, por la A, y así con las demás.» Suetonio, Vida de Julio César

Los cifrados son algoritmos muy sencillos que nos permiten que un texto sea menos legible y aun así fácil de descifrar. Son vulnerables a muchas formas de criptoanálisis, pero César tuvo la suerte de que sus enemigos no fueran criptoanalistas.

El cifrado César se usó para algunos mensajes de Julio César que se enviaban al frente. César sabía que el cifrado no era muy bueno, pero tenía un aliado en ese sentido: casi nadie sabía leer bien. Así que incluso desviarse un par de letras era suficiente para que la gente no reconociera las pocas palabras que sí conocía.

Tu tarea es crear un cifrado de desplazamiento simple como el cifrado César. Esta imagen es un gran ejemplo del cifrado César:

Cifrado César

Por ejemplo:

Dar «iamapandabear» como entrada a la función encode devuelve el cifrado «ldpdsdqgdehdu». Lo bastante oscuro como para mantener nuestro mensaje en secreto en tránsito.

Cuando se pasa «ldpdsdqgdehdu» a la función decode, esta devuelve el «iamapandabear» original, y así tu amigo puede leer tu mensaje original.

Paso 2

Los cifrados de desplazamiento dejan de ser útiles rápidamente cuando el comandante enemigo los descubre. Así que, en lugar de eso, probemos con un cifrado por sustitución. Intenta modificar el código para que podamos especificar una clave y usarla como la distancia del desplazamiento.

Aquí tienes un ejemplo:

Dada la clave «aaaaaaaaaaaaaaaaaa», codificar la cadena «iamapandabear» devolvería el «iamapandabear» original.

Dada la clave «ddddddddddddddddd», codificar nuestra cadena «iamapandabear» devolvería el «ldpdsdqgdehdu» ofuscado.

En el ejemplo anterior, establecimos a = 0 para el valor de la clave. Así que cuando el texto plano se suma a la clave, terminamos obteniendo el mismo mensaje. Entonces «aaaa» no es una clave ideal. Pero si establecemos la clave en «dddd», obtendríamos lo mismo que con el cifrado César.

Paso 3

El eslabón más débil de cualquier cifrado es el ser humano. Hagamos que tu cifrado por sustitución sea un poco más tolerante a los fallos proporcionando una fuente de aleatoriedad y asegurando que la clave contenga solo letras minúsculas.

Si alguien no envía ninguna clave, genera una clave realmente aleatoria de al menos 100 caracteres en minúsculas.

Extensiones

Los cifrados de desplazamiento funcionan haciendo que el texto sea un poco extraño, pero son vulnerables al análisis de frecuencia. Los cifrados por sustitución ayudan con eso, pero siguen siendo muy vulnerables cuando la clave es corta o si se conservan los espacios. Más adelante verás una solución a este problema en el ejercicio «crypto-square».

Si quieres ir más lejos en este campo, las preguntas empiezan a girar en torno a cómo podemos intercambiar claves de forma segura. Echa un vistazo a Diffie-Hellman en Wikipedia para ver una de las primeras implementaciones de este esquema.

Nota

Prueba a usar operaciones aritméticas como el módulo para que los índices den la vuelta cuando se excedan. Las clases Character y String también son tus amigas.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Pharo Exercism

¿Todo listo para empezar Cifrado simple?

Regístrate en Exercism para aprender y dominar Pharo con 50 ejercicios y mentoría humana real, todo gratis.