|
|
|
|
5
|
![main2.png](images/main2.png)
|
5
|
![main2.png](images/main2.png)
|
6
|
![main3.png](images/main3.png)
|
6
|
![main3.png](images/main3.png)
|
7
|
|
7
|
|
8
|
-[version 2016.05.04]
|
|
|
|
|
8
|
+[Verano 2016 - Ive]
|
9
|
|
9
|
|
10
|
Una de las ventajas de utilizar programas de computadoras es que podemos realizar tareas repetitivas fácilmente. Los ciclos como `for`, `while`, y `do-while` son estructuras de control que nos permiten repetir un conjunto de instrucciones. A estas estructuras también se les llama *estructuras de repetición*. En la experiencia de laboratorio de hoy utilizarás ciclos `for` para completar una aplicación de cifrado.
|
10
|
Una de las ventajas de utilizar programas de computadoras es que podemos realizar tareas repetitivas fácilmente. Los ciclos como `for`, `while`, y `do-while` son estructuras de control que nos permiten repetir un conjunto de instrucciones. A estas estructuras también se les llama *estructuras de repetición*. En la experiencia de laboratorio de hoy utilizarás ciclos `for` para completar una aplicación de cifrado.
|
11
|
|
11
|
|
12
|
-##Objetivos:
|
|
|
|
|
12
|
+## Objetivos:
|
13
|
|
13
|
|
14
|
1. Aplicar estructuras de repetición para cifrar un mensaje.
|
14
|
1. Aplicar estructuras de repetición para cifrar un mensaje.
|
15
|
2. Practicar operaciones aritméticas con caracteres.
|
15
|
2. Practicar operaciones aritméticas con caracteres.
|
16
|
|
16
|
|
17
|
-##Pre-Lab:
|
|
|
|
|
17
|
+## Pre-Lab:
|
18
|
|
18
|
|
19
|
-Antes de llegar al laboratorio debes:
|
|
|
|
|
19
|
+Antes de llegar al laboratorio debes haber:
|
20
|
|
20
|
|
21
|
-1. Haber repasado los conceptos básicos relacionados a estructuras de repetición.
|
|
|
|
|
21
|
+1. Repasado los conceptos básicos relacionados a estructuras de repetición.
|
22
|
|
22
|
|
23
|
-2. Haber repasado conceptos básicos de la clase `string` de C++,las funciones `length`, `toupper` y `push_back`, `isalpha` y las operaciones aritméticas con caracteres.
|
|
|
|
|
23
|
+2. Repasado conceptos básicos de la clase `string` de C++,las funciones `length`, `toupper` y `push_back`, `isalpha` y las operaciones aritméticas con caracteres.
|
24
|
|
24
|
|
25
|
-3. Haber visto el video sobre el "Ceasar Cypher" del Khan Academy, colocado en <https://www.youtube.com/watch?v=sMOZf4GN3oc>.
|
|
|
|
|
25
|
+3. Visto el video sobre el "Ceasar Cypher" del Khan Academy, colocado en <https://www.youtube.com/watch?v=sMOZf4GN3oc>.
|
26
|
|
26
|
|
27
|
-4. Haber visto el video sobre el "Vigenere Cypher", colocado en <https://www.youtube.com/watch?v=9zASwVoshiM>.
|
|
|
|
|
27
|
+4. Visto el video sobre el "Vigenere Cypher", colocado en <https://www.youtube.com/watch?v=9zASwVoshiM>.
|
28
|
|
28
|
|
29
|
-5. Haber estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
|
|
|
|
29
|
+5. Estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
|
|
30
|
+
|
|
|
31
|
+6. Tomado el quiz Pre-Lab disponible en Moodle.
|
30
|
|
32
|
|
31
|
|
33
|
|
32
|
---
|
34
|
---
|
33
|
|
35
|
|
34
|
---
|
36
|
---
|
35
|
|
37
|
|
36
|
-##Criptografía
|
|
|
|
|
38
|
+## Criptografía
|
37
|
|
39
|
|
38
|
La *criptografía* es un área que estudia la teoría y los métodos utilizados para proteger información de modo que personas que no estén autorizadas no puedan tener acceso a ella. Un *sistema criptográfico* es un sistema en el que la información (*mensaje* entendible por humanos) es tranformada a un texto cifrado inentendible para las personas no autorizadas a verlo. Las personas autorizadas a ver el mensaje usan un *descifrador* para revertir el texto cifrado al mensaje original.
|
40
|
La *criptografía* es un área que estudia la teoría y los métodos utilizados para proteger información de modo que personas que no estén autorizadas no puedan tener acceso a ella. Un *sistema criptográfico* es un sistema en el que la información (*mensaje* entendible por humanos) es tranformada a un texto cifrado inentendible para las personas no autorizadas a verlo. Las personas autorizadas a ver el mensaje usan un *descifrador* para revertir el texto cifrado al mensaje original.
|
39
|
|
41
|
|
40
|
-###El Cifrado César (Ceasar Cypher)
|
|
|
|
|
42
|
+### El Cifrado César (Ceasar Cypher)
|
41
|
|
43
|
|
42
|
El Cifrado César es una técnica muy simple de cifrado por sustitución. Se dice que el sistema se basa en el sistema utilizado por Julio César, líder militar y político de Roma en años antes de Cristo, para comunicarse con sus generales. La técnica cifra un mensaje de texto sustituyendo cada letra del mensaje por la letra que se encuentra a un número dado de posiciones más adelante en el alfabeto. Esto puede pensarse como un desplazamiento ("shift") del alfabeto. El diagrama de la Figura 1 representa un desplazamiento de 3 espacios. La letra ‘B’ es sustituida por la letra ‘E’.
|
44
|
El Cifrado César es una técnica muy simple de cifrado por sustitución. Se dice que el sistema se basa en el sistema utilizado por Julio César, líder militar y político de Roma en años antes de Cristo, para comunicarse con sus generales. La técnica cifra un mensaje de texto sustituyendo cada letra del mensaje por la letra que se encuentra a un número dado de posiciones más adelante en el alfabeto. Esto puede pensarse como un desplazamiento ("shift") del alfabeto. El diagrama de la Figura 1 representa un desplazamiento de 3 espacios. La letra ‘B’ es sustituida por la letra ‘E’.
|
43
|
|
45
|
|
|
|
|
|
59
|
|
61
|
|
60
|
---
|
62
|
---
|
61
|
|
63
|
|
62
|
-###Utilizando el operador módulo
|
|
|
|
|
64
|
+### Utilizando el operador módulo
|
63
|
|
65
|
|
64
|
La operación de suma modular es esencial para implementar sistemas de cifrado en programación. En la aplicación de cifrado César de arriba podemos pensar que a cada letra del alfabeto (en inglés) le asignamos un número entre 0 y 25 (La `A` es 0, la`B` es 1, …, la `Z` es 25). El cifrador César convierte cada letra al número correspondiente en el intervalo [0, 25] y luego suma el desplazamiento. Para hacer el desplazamiento cíclico, cada vez que nuestro desplazamiento nos dé una letra que corresponda a un número mayor que 25, tomamos el residuo al dividir por 26 y usamos la letra que corresponda a ese residuo. Nota que tomar el residuo al dividir por 26 los resultados estarán entre 0 y 25, que son los valores asociados al alfabeto.
|
66
|
La operación de suma modular es esencial para implementar sistemas de cifrado en programación. En la aplicación de cifrado César de arriba podemos pensar que a cada letra del alfabeto (en inglés) le asignamos un número entre 0 y 25 (La `A` es 0, la`B` es 1, …, la `Z` es 25). El cifrador César convierte cada letra al número correspondiente en el intervalo [0, 25] y luego suma el desplazamiento. Para hacer el desplazamiento cíclico, cada vez que nuestro desplazamiento nos dé una letra que corresponda a un número mayor que 25, tomamos el residuo al dividir por 26 y usamos la letra que corresponda a ese residuo. Nota que tomar el residuo al dividir por 26 los resultados estarán entre 0 y 25, que son los valores asociados al alfabeto.
|
65
|
|
67
|
|
|
|
|
|
94
|
|
96
|
|
95
|
|
97
|
|
96
|
|
98
|
|
97
|
-###El Cifrado Vigenere
|
|
|
|
|
99
|
+### El Cifrado Vigenere
|
98
|
|
100
|
|
99
|
La debilidad principal del cifrador César es que cada letra en el mensaje se desplaza por el mismo número de posiciones. El cifrado Vigenere es un método de cifrado un poco más fuerte porque el desplazamiento en cada letra no es constante. El cifrado César recibe como datos de entrada el mensaje y un desplazamiento, mientras que el cifrado Vigenere recibe como dato de entrada el mensaje y una **clave** que determina el desplazamiento que se le hará a cada letra del mensaje.
|
101
|
La debilidad principal del cifrador César es que cada letra en el mensaje se desplaza por el mismo número de posiciones. El cifrado Vigenere es un método de cifrado un poco más fuerte porque el desplazamiento en cada letra no es constante. El cifrado César recibe como datos de entrada el mensaje y un desplazamiento, mientras que el cifrado Vigenere recibe como dato de entrada el mensaje y una **clave** que determina el desplazamiento que se le hará a cada letra del mensaje.
|
100
|
|
102
|
|
|
|
|
|
135
|
|
137
|
|
136
|
---
|
138
|
---
|
137
|
|
139
|
|
138
|
-##Funciones que se utilizarán en esta experiencia de laboratorio:
|
|
|
|
|
140
|
+## Funciones que se utilizarán en esta experiencia de laboratorio:
|
139
|
|
141
|
|
140
|
El programa que estarás modificando en la sesión de hoy utiliza los siguientes métodos de la clase `string`:
|
142
|
El programa que estarás modificando en la sesión de hoy utiliza los siguientes métodos de la clase `string`:
|
141
|
|
143
|
|
|
|
|
|
170
|
---
|
172
|
---
|
171
|
|
173
|
|
172
|
|
174
|
|
173
|
-##Sesión de laboratorio:
|
|
|
|
|
175
|
+## Sesión de laboratorio:
|
174
|
|
176
|
|
175
|
En esta experiencia de laboratorio completarás una aplicación para cifrar un mensaje de texto utilizando el cifrado Vigenere. Para simplificar el código, la clave y el mensaje deben consistir solo de letras y tu programa debe cambiar todas las letras del mensaje y la clave a mayúsculas.
|
177
|
En esta experiencia de laboratorio completarás una aplicación para cifrar un mensaje de texto utilizando el cifrado Vigenere. Para simplificar el código, la clave y el mensaje deben consistir solo de letras y tu programa debe cambiar todas las letras del mensaje y la clave a mayúsculas.
|
176
|
|
178
|
|
177
|
-###Ejercicio 1: Cifrador con clave y mensaje del mismo largo (solo letras)
|
|
|
|
|
179
|
+### Ejercicio 1 - Cifrador con clave y mensaje del mismo largo (solo letras)
|
178
|
|
180
|
|
179
|
En este ejercicio completarás la aplicación para cifrar un mensaje de texto,
|
181
|
En este ejercicio completarás la aplicación para cifrar un mensaje de texto,
|
180
|
que solo contiene letras, utilizando una palabra clave que también consiste solo de letras y que tiene el mismo largo del mensaje.
|
182
|
que solo contiene letras, utilizando una palabra clave que también consiste solo de letras y que tiene el mismo largo del mensaje.
|
181
|
|
183
|
|
182
|
-####Instrucciones
|
|
|
|
|
184
|
+#### Instrucciones:
|
183
|
|
185
|
|
184
|
1. Descarga la carpeta Repetitions-VigenereCypher de Bitbucket usando un terminal, moviéndote al directorio Documents/eip, y escribiendo el comando git clone http://bitbucket.org/eip-uprrp/repetitions-vigenerecypher.
|
186
|
1. Descarga la carpeta Repetitions-VigenereCypher de Bitbucket usando un terminal, moviéndote al directorio Documents/eip, y escribiendo el comando git clone http://bitbucket.org/eip-uprrp/repetitions-vigenerecypher.
|
185
|
|
187
|
|
|
|
|
|
192
|
4. Al terminar tu código, ve a la función `main` y descomenta la invocación a la función de prueba unitaria `test_cypher1`. Esa función realiza varias invocaciones a la función `cypher` para validar si sus resultados son correctos. Tu función `cypher` debe pasar todas las pruebas antes de continuar con la próxima parte de este laboratorio.
|
194
|
4. Al terminar tu código, ve a la función `main` y descomenta la invocación a la función de prueba unitaria `test_cypher1`. Esa función realiza varias invocaciones a la función `cypher` para validar si sus resultados son correctos. Tu función `cypher` debe pasar todas las pruebas antes de continuar con la próxima parte de este laboratorio.
|
193
|
|
195
|
|
194
|
|
196
|
|
195
|
-###Ejercicio 2: Cifrador con clave y mensaje de largos arbitrarios
|
|
|
|
|
197
|
+### Ejercicio 2 - Cifrador con clave y mensaje de largos arbitrarios
|
196
|
|
198
|
|
197
|
En este ejercicio modificarás el código de la función `cypher` que creaste para el Ejercicio 1 de modo que la aplicación ahora pueda cifrar cualquier mensaje utilizando una palabra clave que consista solo de letras pero que tenga cualquier largo.
|
199
|
En este ejercicio modificarás el código de la función `cypher` que creaste para el Ejercicio 1 de modo que la aplicación ahora pueda cifrar cualquier mensaje utilizando una palabra clave que consista solo de letras pero que tenga cualquier largo.
|
198
|
|
200
|
|
199
|
-####Instrucciones
|
|
|
|
|
201
|
+#### Instrucciones:
|
200
|
|
202
|
|
201
|
1. Escribe el código de la función `cypher` para que reciba un mensaje y una clave y devuelva el mensaje cifrado por el cifrador Vigenere. En esta ocasión, el mensaje y la clave pueden tener cualquier largo y el mensaje puede tener cualquier caracter (la clave solo puede tener letras).
|
203
|
1. Escribe el código de la función `cypher` para que reciba un mensaje y una clave y devuelva el mensaje cifrado por el cifrador Vigenere. En esta ocasión, el mensaje y la clave pueden tener cualquier largo y el mensaje puede tener cualquier caracter (la clave solo puede tener letras).
|
202
|
|
204
|
|