- 1. Definición del producto
- 2. Instrucciones de uso
- 3. Objetivos de aprendizaje
- 4. Consideraciones generales
- 5. Criterios de aceptación mínimos del proyecto
- 6. Hacker edition
- 7. Consideraciones técnicas
- 8. Pistas, tips y lecturas complementarias
- 9. Checklist
La aplicación web tiene por objetivo brindar un espacio seguro de codificación y decodificación de textos mediante el uso de la metodología de cifrado César. El cifrado César es una de las técnicas más simples para cifrar un mensaje. Es un tipo de codificación por sustitución, es decir que cada letra del texto original es reemplazada por otra que se encuentra un número fijo de posiciones (desplazamiento) más adelante en el mismo alfabeto. Por ejemplo:
• La letra A se cifraría como la C si usamos un desplazamiento de dos posiciones. Viviana.
• La palabra HOLA se cifraría como JQNC si nos desplazamos dos puestos.
USUARIOS
Mi proyecto se orienta principalmente a satisfacer la necesidad de seguridad y confidencialidad de los periodistas en situaciones de riesgo. La labor periodística requiere de la implementación de diferentes técnicas que les permita a los comunicadores compartir información entre ellos sin que esta logre filtrarse antes de que decidan publicarla. La plataforma que he diseñado responde a este imperativo propio de su profesión.
OBJETIVO DE LOS USUARIOS
Los periodistas que decidan hacer uso de mi plataforma podrán cifrar los textos que deseen y podrán definir a su discreción el offset (desplazamiento) de cifrado. De igual manera tienen a su disposición la posibilidad de descifrar los textos que les sean enviados. Para dicho propósito la sección de decodificación funciona de la misma manera que la de codificación.
VENTAJAS DE LA APLICACIÓN
Compartir información entre ellos se podrá realizar de una manera un poco más segura ya que el texto interceptado se encontrará cifrado y quien lo intercepte tendrá que conocer no sólo la técnica de cifrado sino el desplazamiento fijado por el autor. Información que sólo las partes interesadas tendrán en su poder.
Para poder hacer uso de la plataforma se deben seguir los siguientes pasos:
- Dirígete a [PORTADA] (https://vivipe28.github.io/BOG004-cipher/src/index.html)
- Digita el nombre y la contraseña correspondiente y haz click en el botón "INGRESAR".
- Ingresa el offset deseado ya sea para cifrar o descifrar.
- En el cuadro de texto que está debajo del input del offset introduce el texto a cifrar.
- Da click al botón “CIFRAR” para ejecutar el proceso de cifrado
- Listo! En el cuadro de texto inferior obtienes el texto cifrado
- El procedimiento es el mismo para el proceso de decodificación.
Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo.
-
Uso de HTML semántico
-
Uso de selectores de CSS
-
Modelo de caja (box model): borde, margen, padding
-
Uso de selectores del DOM
-
Manejo de eventos del DOM (listeners, propagación, delegación)
-
Manipulación dinámica del DOM
-
Tipos de datos primitivos
-
Strings (cadenas de caracteres)
-
Variables (declaración, asignación, ámbito)
-
Uso de condicionales (if-else, switch, operador ternario, lógica booleana)
-
Uso de bucles/ciclos (while, for, for..of)
-
Funciones (params, args, return)
-
Pruebas unitarias (unit tests)
-
Módulos de ECMAScript (ES Modules)
-
Uso de linter (ESLINT)
-
Uso de identificadores descriptivos (Nomenclatura y Semántica)
-
Git: Instalación y configuración
-
Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)
-
GitHub: Creación de cuenta y repos, configuración de llaves SSH
-
GitHub: Despliegue con GitHub Pages
-
Diseñar la aplicación pensando en y entendiendo al usuario
-
Crear prototipos para obtener feedback e iterar
-
Aplicar los principios de diseño visual
- El equipo de coaches te dará un tiempo sugerido e indicaciones sobre si trabajar sola o en equipo. Recuerda que cada una aprende a diferente ritmo.
- El proyecto será entregado subiendo tu código a GitHub (commit/push) y la interfaz será desplegada usando GitHub pages. Si no sabes lo que es GitHub, no te preocupes, lo aprenderás durante este proyecto.
Usa este alfabeto simple (solamente mayúsculas y sin ñ):
- 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 Z
En el README.md, cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso para definir el producto final a nivel de experiencia y de interfaz.
- Quiénes son los principales usuarios de producto.
- Cuáles son los objetivos de estos usuarios en relación con tu producto.
- Cómo crees que el producto que estás creando está resolviendo sus problemas.
La interfaz debe permitir al usuario:
- Elegir un desplazamiento (offset) indicando cuántas posiciones queremos que el cifrado desplace cada caracter.
- Insertar un mensaje (texto) que queremos cifrar.
- Ver el resultado del mensaje cifrado.
- Insertar un mensaje (texto) a descifrar.
- Ver el resultado del mensaje descifrado.
README.md: debe explicar cómo descargar, instalar y ejecutar la aplicación así como una introducción a la aplicación, su funcionalidad y decisiones de diseño que tomaron.src/index.html: este es el punto de entrada a tu aplicación. Este archivo debe contener tu markup (HTML) e incluir el CSS y JavaScript necesario.src/cipher.js: acá debes implementar el objetocipher, el cual ya está exportado en el boilerplate. Este objeto (cipher) debe contener dos métodos:cipher.encode(offset, string):offsetes el número de posiciones que queremos mover a la derecha en el alfabeto ystringel mensaje (texto) que queremos cifrar.cipher.decode(offset, string):offsetes el número de posiciones que queremos mover a la izquierda en el alfabeto ystringel mensaje (texto) que queremos descifrar.
src/index.js: acá debes escuchar eventos del DOM, invocarcipher.encode()ocipher.decode()según sea necesario y actualizar el resultado en la UI.test/cipher.spec.js: este archivo contiene algunos tests de ejemplo y acá tendrás que implementar los tests paracipher.encode()ycipher.decode().
Las secciones llamadas Hacker Edition son opcionales. Si terminaste con todo lo anterior y te queda tiempo, intenta completarlas. Así podrás profundizar y/o ejercitar más sobre los objetivos de aprendizaje del proyecto.
La descripción general de este proyecto no menciona qué pasaría con las letras minúsculas y otros caracteres (como espacios, puntuación, ñ, ...). El boilerplate incluye algunos tests (comentados en principio) que puedes usar como punto de partida para implementar el soporte para estos casos.
Tampoco se menciona qué pasaría si el offset fuera negativo. Como parte del hacker edition te invitamos a explorar también esta caso por tu cuenta.
La lógica del proyecto debe estar implementada completamente en JavaScript. En este proyecto NO está permitido usar librerías o frameworks, solo JavaScript puro también conocido como Vanilla JavaScript.
Los tests unitarios deben cubrir un mínimo del 70% de statements, functions
y lines, y un mínimo del 50% de branches. El boilerplate ya contiene el
setup y configuración necesaria para ejecutar los tests (pruebas) así como code
coverage para ver el nivel de cobertura de los tests usando el comando npm test.
El boilerplate incluye tests (pruebas) de ejemplo como punto de partida.
Para comenzar este proyecto tendrás que hacer un fork y clonar este repositorio que contiene el boilerplate.
El boilerplate contiene una estructura de archivos como punto de partida así como toda la configuración de dependencias y tests de ejemplo:
./
├── .babelrc
├── .editorconfig
├── .eslintrc
├── .gitignore
├── README.md
├── package.json
├── src
│ ├── cipher.js
│ ├── index.html
│ ├── index.js
│ └── style.css
└── test
├── .eslintrc
└── cipher.spec.js
El boilerplate incluye tareas que ejecutan eslint y
htmlhint para verificar el HTML y
JavaScript con respecto a una guías de estilos. Ambas tareas se ejecutan
automáticamente antes de ejecutar las pruebas (tests) cuando usamos el comando
npm run test. En el caso de JavaScript estamos usando un archivo de
configuración de eslint que se llama .eslintrc que contiene un mínimo de
información sobre el parser que usar (qué version de JavaScript/ECMAScript), el
entorno (browser en este caso) y las reglas recomendadas ("eslint:recommended").
En cuanto a reglas/guías de estilo en sí,
usaremos las recomendaciones por defecto de tanto eslint como htmlhint.
- Antes que nada, asegúrate de tener un 📝 editor de texto en condiciones, algo como Atom o Code.
- Para ejecutar los comandos a continuación necesitarás una 🐚
UNIX Shell,
que es un programita que interpreta líneas de comando (command-line
interpreter) así como tener git
instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS,
ya tienes una shell (terminal) instalada por defecto (y probablemente
gittambién). Si usas Windows puedes usar la versión completa de Cmder que incluye Git bash y si tienes Windows 10 o superior puedes usar Windows Subsystem for Linux. - Una de las integrantes del equipo debe realizar un 🍴
fork del repo de tu cohort,
tus coaches te compartirán un link a un repo y te darán acceso de lectura
en ese repo. La otra integrante del equipo deber hacer un fork del
repositorio de su compañera y
configurar un
remotehacia el mismo. - ⬇️ Clona tu fork a tu computadora (copia local).
- 📦 Instala las dependencias del proyecto con el comando
npm install. Esto asume que has instalado Node.js (que incluye npm). - Si todo ha ido bien, deberías poder ejecutar las 🚥
pruebas unitarias (unit tests) con el comando
npm test. - Para ver la interfaz de tu programa en el navegador, usa el comando
npm startpara arrancar el servidor web y dirígete ahttp://localhost:5000en tu navegador. - A codear se ha dicho! 🚀
A continuación un video de Michelle que te lleva a través de la fórmula matemática del Cifrado César y un par de cosas más que debes saber para resolver este proyecto. ¡Escúchala con detenimiento y sigue sus consejos! :)
También una metodología para empezar a desarrollar tareas con JavaScript:
Terminal y shell de UNIX:
Control de versiones y trabajo colaborativo con Git y GitHub:
Diseño de experiencia de usuario (User Experience Design):
- Ideación
- Prototipado (sketching)
- Testeo e Iteración
Desarrollo Front-end:
- Valores
- Tipos
- Variables
- Control de flujo
- Tests unitarios
- Aprende más sobre
charCodeAt() - Aprende más sobre
String.fromCharCode() - Aprende más sobre
ASCII - Documentación de NPM
Organización del Trabajo:
- Metodologías Ágiles
- Scrum en menos de 2 minutos
- Scrum en Detalle. No esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a poco a lo largo del -bootcamp.
- Guía para Cifrado César
Esta sección está para ayudarte a llevar un control de lo que vas completando.
-
README.mdincluye info sobre proceso y decisiones de diseño. -
README.mdexplica claramente quiénes son los usuarios y su relación con el producto. -
README.mdexplica claramente cómo el producto soluciona los problemas/necesidades de los usuarios. - Usa VanillaJS.
- Implementa
cipher.encode. - Implementa
cipher.decode. - Pasa linter con configuración provista.
- Pasa pruebas unitarias.
- Pruebas unitarias cubren 70% de statements, functions y lines, y un mínimo del 50% de branches.
- Interfaz permite elegir el
offseto desplazamiento a usar en el cifrado/descifrado. - Interfaz permite escribir un texto para ser cifrado.
- Interfaz muestra el resultado del cifrado correctamente.
- Interfaz permite escribir un texto para ser descifrado.
- Interfaz muestra el resultado del descifrado correctamente.
- Cifra/descifra minúsculas
- Cifra/descifra otros caracteres (espacios, puntuación,
ñ,á, ...) - Permite usar un
offsetnegativo.



