Bladeren bron

README-es.md edited online with Bitbucket

Jose R Ortiz Ubarri 8 jaren geleden
bovenliggende
commit
a507bcdb85
1 gewijzigde bestanden met toevoegingen van 32 en 29 verwijderingen
  1. 32
    29
      README-es.md

+ 32
- 29
README-es.md Bestand weergeven

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
-[Verano 2016 - Ive]
8
+[Verano 2016 - Ive- Tatiana]
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
 
20
 
20
 
21
 1. 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. 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. 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
 
28
 
28
 
29
 5. 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
 
30
 
31
-6. Tomado el quiz Pre-Lab disponible en Moodle.
31
+6. Tomado el quiz Pre-Lab, disponible en Moodle.
32
 
32
 
33
 
33
 
34
 ---
34
 ---
37
 
37
 
38
 ## Criptografía 
38
 ## Criptografía 
39
 
39
 
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.  
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 transformada 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.  
41
 
41
 
42
 ### El Cifrado César (Ceasar Cypher)
42
 ### El Cifrado César (Ceasar Cypher)
43
 
43
 
47
 
47
 
48
 ![figure1.png](images/figure1.png)
48
 ![figure1.png](images/figure1.png)
49
 
49
 
50
-**Figura 1.** Cifrador César con desplazamiento de 3 espacios.
50
+**Figura 1.** Cifrado César con desplazamiento de 3 espacios.
51
 
51
 
52
 ---
52
 ---
53
 
53
 
57
 
57
 
58
 ![figure2.png](images/figure2.png)
58
 ![figure2.png](images/figure2.png)
59
 
59
 
60
-**Figura 2.** Disco para cifrador César que muestra un desplazamiento de 8 espacios.
60
+**Figura 2.** Disco para cifrado César que muestra un desplazamiento de 8 espacios.
61
 
61
 
62
 ---
62
 ---
63
 
63
 
64
 ### Utilizando el operador módulo
64
 ### Utilizando el operador módulo
65
 
65
 
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.
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 cifrado 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.
67
 
67
 
68
 El residuo al dividir dos números enteros se puede obtener utilizando el operador de *módulo*: `%`.
68
 El residuo al dividir dos números enteros se puede obtener utilizando el operador de *módulo*: `%`.
69
 
69
 
71
 
71
 
72
 El proceso de arriba funciona si podemos asociar las letras de la ‘A’ a la ‘Z’ con los números del `0` al `25`. Esto se logra utilizando el valor numérico de los caracteres. Como en  el código ASCII el valor de las letras ‘A’ a la ‘Z’ va desde 65 hasta 90,  necesitamos hacer un ajuste en el cómputo de modo que a la `A` se le asigne `0`. Para convertir una letra mayúscula a un número en el intervalo [0, 25] solo tenemos que restar 65 (`’A’ - 65 = 0`, `’Z’ - 65 = 25`). Para cambiar un valor en el intervalo [0, 25] a la letra mayúscula que corresponde en el código ASCII solo tenemos que sumar 65 al número. Por ejemplo, el número 3 corresponde a la letra cuyo código ASCII es $3 + 65 = 68$, la letra ‘D’.
72
 El proceso de arriba funciona si podemos asociar las letras de la ‘A’ a la ‘Z’ con los números del `0` al `25`. Esto se logra utilizando el valor numérico de los caracteres. Como en  el código ASCII el valor de las letras ‘A’ a la ‘Z’ va desde 65 hasta 90,  necesitamos hacer un ajuste en el cómputo de modo que a la `A` se le asigne `0`. Para convertir una letra mayúscula a un número en el intervalo [0, 25] solo tenemos que restar 65 (`’A’ - 65 = 0`, `’Z’ - 65 = 25`). Para cambiar un valor en el intervalo [0, 25] a la letra mayúscula que corresponde en el código ASCII solo tenemos que sumar 65 al número. Por ejemplo, el número 3 corresponde a la letra cuyo código ASCII es $3 + 65 = 68$, la letra ‘D’.
73
 
73
 
74
-La Figura 3 muestra el pseudocódigo para una algoritmo para el cifrador César. Cada letra ‘c’ en el mensaje se convierte a un número en el intervalo [0, 25] (restándole ‘A’), luego se hace el desplazamiento de d unidades al número (sumando d módulo 26). Finalmente se convierte el resultado al caracter correspondiente sumando el código ASCII de ‘A’.
74
+La Figura 3 muestra el pseudocódigo para una algoritmo para el cifrado César. Cada letra ‘c’ en el mensaje se convierte a un número en el intervalo [0, 25] (restándole ‘A’), luego se hace el desplazamiento de `d` unidades al número (sumando `d` módulo 26). Finalmente se convierte el resultado al carácter correspondiente sumando el código ASCII de ‘A’.
75
 
75
 
76
 ---
76
 ---
77
 
77
 
78
 ```cpp
78
 ```cpp
79
-    Datos de entrada: un "string" de mensaje, la cantidad de desplazamiento d 
79
+    Datos de entrada: un "string" de mensaje, la cantidad de desplazamiento `d` 
80
     Datos de salida: el mensaje cifrado usando cifrado César 
80
     Datos de salida: el mensaje cifrado usando cifrado César 
81
 
81
 
82
     1. cypheredText = ""
82
     1. cypheredText = ""
88
     3. devuelve ("return") cypheredText 
88
     3. devuelve ("return") cypheredText 
89
 ```
89
 ```
90
 
90
 
91
-**Figura 3.** Pseudo-código para cifrar utilizando un cifrador César.
91
+**Figura 3.** Pseudo-código para cifrar utilizando un cifrado César.
92
 
92
 
93
 ---
93
 ---
94
 
94
 
95
-El cifrado César no es muy seguro ya que puede descifrarse fácilmente con un análisis de frecuencia. Por ejemplo, se sabe que en el idioma inglés la letra ‘e’ es la letra más frecuente en un texto. Si buscamos la letra que más se repite en un texto cifrado con un cifrador César, lo más probable es que esa fue la letra que se sustituyó por la ‘e’; con esto podemos deducir cuál fue desplazamiento utilizado y así descifrar el mensaje.
95
+El cifrado César no es muy seguro ya que puede descifrarse fácilmente con un análisis de frecuencia. Por ejemplo, se sabe que en el idioma inglés la letra ‘e’ es la letra más frecuente en un texto. Si buscamos la letra que más se repite en un texto cifrado con un cifrado César, lo más probable es que esa fue la letra que se sustituyó por la ‘e’; con esto podemos deducir cuál fue desplazamiento utilizado y así descifrar el mensaje.
96
 
96
 
97
 
97
 
98
 
98
 
99
 ### El Cifrado Vigenere 
99
 ### El Cifrado Vigenere 
100
 
100
 
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.
101
+La debilidad principal del cifrado 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.
102
 
102
 
103
-**Ejemplo 2.** Supongamos por el momento que tanto el mensaje como la clave tienen el mismo largo. Por ejemplo, suponga que el mensaje es "COSAS" y la palabra clave es "MENOR". La letra ‘C’ se parea con la letra ‘M’, la letra ‘O’ se parea con la letra ‘E’, la ‘S’ con la ‘N’, etcétera, como en la figura de abajo. Como la letra ‘A’ corresponde a un desplazamiento de 0 espacios, entonces la letra ‘M’ corresponde a un desplazamiento de 12 espacios, la ‘E’ a un desplazamiento de 4 espacios, etc. Utilizando la palabra clave "MENOR", el cifrador Vigenere hará un desplazamiento de 12 espacios a la letra ‘C’, un desplazamiento de 4 espacios a la letra ‘O’, etc., hasta obtener la palabra cifrada "OSFOJ" como se muestra en la Figura 4. 
103
+**Ejemplo 2.** Supongamos por el momento que tanto el mensaje como la clave tienen el mismo largo. Por ejemplo, suponga que el mensaje es "COSAS" y la palabra clave es "MENOR". La letra ‘C’ se parea con la letra ‘M’, la letra ‘O’ se parea con la letra ‘E’, la ‘S’ con la ‘N’, etcétera, como en la figura de abajo. Como la letra ‘A’ corresponde a un desplazamiento de 0 espacios, entonces la letra ‘M’ corresponde a un desplazamiento de 12 espacios, la ‘E’ a un desplazamiento de 4 espacios, etc. Utilizando la palabra clave "MENOR", el cifrado Vigenere hará un desplazamiento de 12 espacios a la letra ‘C’, un desplazamiento de 4 espacios a la letra ‘O’, etc., hasta obtener la palabra cifrada "OSFOJ" como se muestra en la Figura 4. 
104
 
104
 
105
 ---
105
 ---
106
 
106
 
113
 
113
 
114
 ---
114
 ---
115
 
115
 
116
-Podemos visualizar un cifrador Vigenere utilizando una tabla como la de la Figura 5. Nota que lo que se hace es usar un cifrador César con un desplazamiento diferente para cada letra del mensaje.
116
+Podemos visualizar un cifrado Vigenere utilizando una tabla como la de la Figura 5. Nota que lo que se hace es usar un cifrado César con un desplazamiento diferente para cada letra del mensaje.
117
 
117
 
118
 ---
118
 ---
119
 
119
 
120
 ![figure6.png](images/figure6.png)
120
 ![figure6.png](images/figure6.png)
121
 
121
 
122
-**Figura 5.** Tabla para cifrador Vigenere.
122
+**Figura 5.** Tabla para el cifrado Vigenere.
123
 
123
 
124
 ---
124
 ---
125
 
125
 
143
 
143
 
144
 * `length`: Devuelve el largo de un objeto de la clase `string`; esto es, `length` devuelve el número de caracteres que tiene el "string". Se utiliza escribiendo `.length()` después del nombre del objeto.
144
 * `length`: Devuelve el largo de un objeto de la clase `string`; esto es, `length` devuelve el número de caracteres que tiene el "string". Se utiliza escribiendo `.length()` después del nombre del objeto.
145
 
145
 
146
-* `push_back`: Este método recibe un caracter como argumento y lo añade al final del “string”. Se utiliza escribiendo `.push_back(elCaracter)` después del nombre del “string”. Por ejemplo, para añadir el caracter 'a' a  un objeto de la clase `string` llamado  `cadena`, escribimos `cadena.push_back('a')`.
146
+* `push_back`: Este método recibe un carácter como argumento y lo añade al final del “string”. Se utiliza escribiendo `.push_back(elCaracter)` después del nombre del “string”. Por ejemplo, para añadir el carácter 'a' a  un objeto de la clase `string` llamado  `cadena`, escribimos `cadena.push_back('a')`.
147
 
147
 
148
 También utilizaremos las funciones:
148
 También utilizaremos las funciones:
149
 
149
 
150
-* `toupper`: Esta función recibe como argumento un caracter y devuelve el caracter en mayúscula. Por ejemplo, para cambiar el caracter 'a' a mayúscula se utiliza `toupper('a')`.
150
+* `toupper`: Esta función recibe como argumento un carácter y devuelve el caracter en mayúscula. Por ejemplo, para cambiar el carácter 'a' a mayúscula se utiliza `toupper('a')`.
151
 
151
 
152
-* `isalpha`: Esta función recibe como argumento un caracter y devuelve un valor distinto de cero (`true`) si el caracter es una letra y cero (`false`) si el caracter no es una letra. Por ejemplo, `isalpha(3)` devuelve "false" pero `isalpha(‘F’)` devuelve `true`.
152
+* `isalpha`: Esta función recibe como argumento un carácter y devuelve un valor distinto de cero (`true`) si el carácter es una letra y cero (`false`) si el carácter no es una letra. Por ejemplo, `isalpha(3)` devuelve `false` pero `isalpha(‘F’)` devuelve `true`.
153
 
153
 
154
 
154
 
155
 ---
155
 ---
174
 
174
 
175
 ## Sesión de laboratorio:
175
 ## Sesión de laboratorio:
176
 
176
 
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.
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 sólo de letras y tu programa debe cambiar todas las letras del mensaje y la clave a mayúsculas.
178
 
178
 
179
-### Ejercicio 1 - Cifrador con clave y mensaje del mismo largo (solo letras)
179
+### Ejercicio 1 - Cifrado con clave y mensaje del mismo largo (solo letras)
180
 
180
 
181
 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, 
182
 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. 
188
     * Utilizando la máquina virtual: Haz doble “click” en el archivo `VigenereCypher.pro` que se encuentra  en el directorio `/home/eip/labs/repetitions-vigenerecypher` de la máquina virtual.
188
     * Utilizando la máquina virtual: Haz doble “click” en el archivo `VigenereCypher.pro` que se encuentra  en el directorio `/home/eip/labs/repetitions-vigenerecypher` de la máquina virtual.
189
     * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/repetitions-vigenerecypher` para descargar la carpeta `repetitions-vigenerecypher` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `VigenereCypher.pro`.
189
     * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/repetitions-vigenerecypher` para descargar la carpeta `repetitions-vigenerecypher` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `VigenereCypher.pro`.
190
 
190
 
191
-2. Estarás añadiendo código en el archivo `cypher.cpp`. En este archivo, la función `cypher` recibe un mensaje y una clave del mismo largo y consistentes solo de letras, y devuelve el mensaje cifrado por el cifrador Vigenere. Tu tarea es completar la función de cifrado.
191
+2. Estarás añadiendo código en el archivo `cypher.cpp`. En este archivo, la función `cypher` recibe un mensaje y una clave del mismo largo y consistentes sólo de letras, y devuelve el mensaje cifrado por el cifrado Vigenere. Tu tarea es completar la función de cifrado.
192
  
192
  
193
-    El código debe verificar si el mensaje y la clave consisten solo de letras y tienen el mismo largo; si esto no ocurre, el mensaje cifrado será (literalmente) `"MENSAJE O CLAVE INVALIDO"`. El programa debe implementar el cifrador Vigenere para ir cifrando cada letra del mensaje utilizando la clave.  Solo debes utilizar las funciones mencionadas en la sección anterior. Para simplificar el código tu programa debe cambiar todas las letras del mensaje y la clave a mayúsculas.
193
+    El código debe verificar si el mensaje y la clave consisten solo de letras y tienen el mismo largo; si esto no ocurre, el mensaje cifrado será (literalmente) `"MENSAJE O CLAVE INVÁLIDA"`. El programa debe implementar el cifrado Vigenere para ir cifrando cada letra del mensaje utilizando la clave.  Solo debes utilizar las funciones mencionadas en la sección anterior. Para simplificar el código tu programa debe cambiar todas las letras del mensaje y la clave a mayúsculas.
194
 
194
 
195
-3. 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. 
195
+3. 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`. Esta 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. 
196
 
196
 
197
 
197
 
198
-### Ejercicio 2 - Cifrador con clave y mensaje de largos arbitrarios 
198
+### Ejercicio 2 - Cifrado con clave y mensaje de largos arbitrarios 
199
 
199
 
200
-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. 
200
+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 puede cifrar cualquier mensaje utilizando una palabra clave que consista sólo de letras pero que tenga cualquier largo. 
201
 
201
 
202
 #### Instrucciones:
202
 #### Instrucciones:
203
 
203
 
204
-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). 
204
+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 cifrado Vigenere. En esta ocasión, el mensaje y la clave pueden tener cualquier largo y el mensaje puede tener cualquier carácter (la clave solo puede tener letras). 
205
 
205
 
206
-     El programa debe implementar el cifrador Vigenere para ir cifrando cada caracter del mensaje utilizando las letras de la clave.  Para simplificar el código, tu programa debe cambiar todas las letras a mayúsculas. Si alguno de los caracteres del mensaje no es una letra, el cifrador no lo cambia, como se muestra en la Figura 7. Si alguno de los caracteres de la clave no es una letra, el mensaje cifrado será "CLAVE INVALIDA". Solo debes utilizar las funciones mencionadas en la sección anterior.
206
+     El programa debe implementar el cifrado Vigenere para ir cifrando cada carácter del mensaje utilizando las letras de la clave.  Para simplificar el código, tu programa debe cambiar todas las letras a mayúsculas. Si alguno de los caracteres del mensaje no es una letra, el cifrador no lo cambia, como se muestra en la Figura 7. Si alguno de los caracteres de la clave no es una letra, el mensaje cifrado será "CLAVE INVALIDA". Solo debes utilizar las funciones mencionadas en la sección anterior.
207
 
207
 
208
      ---
208
      ---
209
 
209
 
225
 
225
 
226
 ##Entrega
226
 ##Entrega
227
 
227
 
228
-Utiliza "Entrega" en Moodle para entregar el archivo `cypher.cpp` que contiene la función `cypher` que creaste en el Ejercicio 2. Recuerda utilizar buenas prácticas de programación, incluir el nombre de los programadores y documentar tu programa.
228
+Utiliza "Entrega" en Moodle para entregar el archivo `cypher.cpp` que contiene la función `cypher` que creaste en el Ejercicio 2. Recuerda utilizar buenas prácticas de programación, incluye el nombre de los programadores y documenta tu programa.
229
 
229
 
230
 ---
230
 ---
231
 
231
 
241
 
241
 
242
 -----
242
 -----
243
 
243
 
244
+
245
+
246
+