Julio César 007
CriptografíaCifrado César
La semana pasada recibimos el reto más antiguo hasta la fecha: ¡desde el mismo Imperio Romano nos escribió Julio César (que, en sus ratos libres, se dedica a la criptografía… ¡de verdad!).
Necesitaba un programa que pudiera realizar un cifrado y descifrado utilizando lo que se denomina Cifrado César pero con la particularidad que la rotación de letras podía hacerse del número (positivo o negativo) que quisiéramos. Aquí podéis ver con todo detalle el reto.
Enunciado del reto:
El reto decía:
Queridos amigos:
Soy Cayo Julio César, emperador romano; pero me podéis llamar César. Desde hace tiempo envío mis mensajes sobre estrategia militar con un método que consiste en lo siguiente: escribo una frase y luego sustituyo cada letra por la letra correspondiente tres espacios más a la derecha. Por ejemplo, ADA lo sustituiría por DGD; y EDU por HGX. Pero cuando los mensajes son largos la codificación es un rollo, y además, hacerlo siempre con un desplazamiento de 3 espacios es poco seguro. Necesito un codificador y decodificador que, a partir de un mensaje y un número de desplazamiento (positivo o negativo) me devuelva el mensaje codificado o decodificado respectivamente. Solo trabajaré con letras mayúsculas, y los símbolos, números y espacios no necesito codificarlos ni decodificarlos. ¿Podríais ayudarme?
En este caso hicimos una única solución con dos versiones de una de las funciones de cifrado:
- En primer lugar capturamos el mensaje a cifrar/descifrar y el número de letras de rotación.
- Por otro lado, incluímos dos botones que se encargaban de cifrar o descifrar el mensaje.
- Indicamos cómo resolver la función de cifrado utilizando un algoritmo “clásico” y con una función flecha (reduciendo la mayor parte del código a una sola línea).
- Y la función de descifrado fue copiar y pegar… pero cambiando el sentido de la rotación.
Pero como siempre, recordad, ¡no hay una única solución al problema; hay soluciones mejores y soluciones peores!
¿Qué aprenderás en el vídeo?
En este vídeo veremos:
- Cómo asociar eventos a un elemento HTML y trabajar con la función asociada de manera anónima (en lugar de llamar a una función con nombre).
- Cómo calcular la rotación para que sea menor a 26 (letras del alfabeto) independientemente de que el número sea positivo o negativo.
- Cómo calcular las letras cifradas utilizando un bucle for y trabajando con el método indexOf sobre una cadena.
- Cómo calcular las letras cifradas, pero esta vez utilizando el método replace sobre una función flecha.
- Y cómo no, cómo calcular las letras descifradas utilizando el sistema anterior.
Vídeos y código fuente
¡¿A qué esperas?! ¡Echa un ojo al vídeo de la solución!
Y por supuesto, cómo no:
Código fuente de la solución
¡Ups! Este contenido es solo para codelovers, ¿no te has registrado aún? ¡Hazlo ahora!¿Tú cómo lo habrías hecho? ¡Espero tus propuestas en los comentarios!
Y si quieres compartir código, te recomiendo que utilices alguna herramienta online de testing de código como Codepen, JSFiddle, PlayCode, etc. o repositorios como GitHub, GitLab, BitBucket…
FEDERICO MACÍAS says
Muy bueno el vídeo, muchas gracias, Ada. Además, no sólo aprendimos de JavaScript sino que además aprendimos algo de historia y de criptografía,jeje.
Excelente y como siempre muy completo.
Ada Lovecode says
¡Me alegro de que te guste, Federico! Sí, la verdad es que no te imaginas que algo tan extendido tenga un origen tan lejano. ¡Pensaré otros retos del estilo! 😉
Wilmer Cruz Ocampo says
Donde puedo obtener el codigo ?
didacticode says
En el botón “Código fuente de la solución”
Jazmin says
Le doy click en Código fuente de la función y no aparece nada.
didacticode says
¡Hola, Jazmin!
Para ver el código fuente tienes que estar registrada en la página. Al cambiar un código ha desaparecido un pequeño texto que indicaba esto: que debes estar registrado. Lo he vuelto a poner para que no dé lugar a dudas. ¡Un saludo!