Rutas
/
Pharo
Pharo
/
Ejercicios
/
Cifrado simple
Cifrado simple

Cifrado simple

Media

Instrucciones

Implementa un cifrado por desplazamiento sencillo 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 cifra, esto es, cambiando de tal modo el orden de las letras del alfabeto que no se pudiera formar palabra alguna. Si alguien desea descifrarlas y conocer su significado, debe sustituir la cuarta letra del alfabeto, es decir, la D, por la A, y lo mismo con las demás.» Suetonio, Vida de Julio César

Los cifrados son algoritmos muy sencillos que nos permiten hacer que un texto resulte menos legible sin dejar por ello de poder descifrarlo con facilidad. Son vulnerables a muchas formas de criptoanálisis, pero César tuvo la suerte de que sus enemigos no eran criptoanalistas.

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

Tu tarea consiste en crear un cifrado por desplazamiento sencillo como el cifrado César. Esta imagen es un gran ejemplo del cifrado César:

Cifrado César

Por ejemplo:

Si damos «iamapandabear» como entrada a la función encode, obtenemos el cifrado «ldpdsdqgdehdu». Lo bastante oscuro para mantener nuestro mensaje en secreto durante el trayecto.

Si introducimos «ldpdsdqgdehdu» en la función decode, nos devolverá el original «iamapandabear», lo que permitirá a tu amigo leer tu mensaje original.

Paso 2

Los cifrados por desplazamiento dejan de ser útiles enseguida en cuanto el comandante enemigo los descifra. Así que, en lugar de eso, probemos con un cifrado por sustitución. Intenta modificar el código para poder especificar una clave y usarla como distancia de desplazamiento.

Aquí tienes un ejemplo:

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

Dada la clave «ddddddddddddddddd», codificar nuestro string «iamapandabear» devolvería el oscurecido «ldpdsdqgdehdu».

En el ejemplo anterior, hemos establecido a = 0 como valor de la clave. Así que, cuando el texto sin cifrar se suma a la clave, el mensaje que sale es el mismo. Por eso, «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 fallos proporcionando una fuente de aleatoriedad y asegurándonos de que la clave solo contiene letras minúsculas.

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

Ampliaciones

Los cifrados por desplazamiento funcionan haciendo que el texto resulte un poco extraño, pero son vulnerables al análisis de frecuencias. 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 dar la vuelta a los índices cuando se superen. Las clases Character y String también son tus amigas.

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

¿Listo para empezar Cifrado simple?

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