Saltar la navegación

6. Un reto a toda vela

Rétor dice:A lo largo de todo este recurso has conocido el paradigma actual de programación: la POO. Has visto cómo se definen las clases y cómo se crean posteriormente sus objetos, no solo a nivel de concepto sino a nivel de código en Python. Además, has aprendido cómo codificar también en Python que los objetos actúen entre sí a través de sus atributos y métodos, y cómo reutilizar el código ya desarrollado por ti mismo, gracias a herencia, polimorfismo y sobrecarga, o el desarrollado en proyectos de bibliotecas ya existentes en Python. Pero lo más importante es que has empezado a conocer cómo se comienza el desarrollo de un proyecto de programación: el modelado mediante diagramas de clases.
¡Es la hora de soltar las velas y realizar nuestro reto! Tenemos la misión de generar contraseñas seguras. No olvides revisar todos los puntos anteriores cada vez que la tarea te lo exija ya que aquí tienes todo lo necesario.

1. Organizamos la misión con un diagrama

Candado que representa la contraseña rodeado de un colorido círculo que representa el generador.¿Las contraseñas de tus cuentas de usuario son cortas o fáciles de recordar? ¿Tienes más de una cuenta de usuario con la misma contraseña? Si la respuesta a una o ambas preguntas es «Sí», tienes un problema de seguridad en potencia. Por ello, en este reto vas a programar una solución: ¡el generador de contraseña segura!

Para comenzar, trazaremos la estructura de nuestro reto mediante un diagrama de clases del mismo. Vamos a modelar qué clases, atributos, operaciones y relaciones nos dan la solución al programa que necesitamos plantear.

Pero para ello, necesitas la descripción del problema, que tienes a continuación. Léela, analízala y obtén de ella todos los datos que has trabajado en el apartado anterior:

Un generador de contraseñas seguras es un programa que genera una contraseña segura aleatoria combinando diferentes tipos de caracteres (letras, números, símbolos, mayúsculas y/o minúsculas). El programa principal generará una interfaz que pedirá una longitud, que en ningún caso deberá ser mayor que 8.
Toda contraseña tendrá por tanto una longitud definida y una secuencia de caracteres que serán los caracteres de la propia contraseña generada. Además, de una contraseña se deseará saber por parte del usuario su longitud, qué caracteres contiene tras ser generada y si es o no una contraseña fuerte. Por supuesto, también debe generarse automáticamente.
Las contraseñas pueden ser las generadas de forma ordinaria, pero también pueden ser contraseñas especialmente seguras, que generan la secuencia de caracteres utilizando un juego de caracteres más amplio.

¡No olvides crear el diagrama utilizando la herramienta digital Dibujo de Google que conociste en el apartado anterior!

Motus dice ¿Cómo te has sentido en esta actividad?

Cuando tenemos que hacer alguna actividad podemos tener dudas sobre si seremos capaces de hacerlo.

Para poder vencer a estos miedos en las nuevas actividades que tengas que hacer sigue estos consejos:

  1. Hay cosas que haces muy bien. Úsalas para hacer la actividad.
  2. Hay cosas que te cuestan un poco hacerlas. Inténtalo y cree en ti mismo o en ti misma. Seguro que te sorprende lo que puedes conseguir.
  3. Hay cosas que son muy difíciles. Fíjate en algún ejemplo, pregunta a tu compañero o compañera. Pide ayuda a tu profe.

¡Seguro que lo harás genial!

2. Recuerdo y evocación

Para conseguir alcanzar una meta es importante que seas un buen o buena estratega. Es decir, tener métodos, técnicas, “trucos” para llegar antes o de forma más fácil donde tú quieres.

Ahora te voy a enseñar una estrategia, ¡Aprovéchala para alcanzar tu reto!

El nombre de la estrategia es recuerdo y evocación. Recordar tareas que has resuelto antes, te ayuda a saber enfrentarte a una nueva actividad que sea similar con lo aprendido la vez anterior. Para ello, puedes pensar en las dificultades, las ventajas, qué te fue mejor o qué recursos utilizaste y tomar decisiones que permitan hacerlo mejor que la primera vez.

Podrás encontrar todo lo que necesitas sobre esta estrategia en el siguiente enlace a la guía de la competencia de aprender a aprender.

Tómate el tiempo que necesites y recuerda que siempre puedes preguntarle al docente o a algún compañero o compañera cuando no entiendas algo.

¡Ánimo, seguro que lo haces genial!

3. Creamos la oportunidad

Letrero con letras mayúsculas, minúsculas y números en color negroYa que tienes definido tu modelo para el programa es hora de crear la oportunidad de desarrollo de una contraseña segura. ¡Vamos a generarla!

Para ello, deberás crear una función que genere y devuelva una contraseña creada al azar. Esta contraseña podrá estar formada por números, letras mayúsculas y letras minúsculas. Para ello, debes seguir las siguientes especificaciones que te ayudarán a desarrollar el código:

  1. Genera un número aleatorio entre 1 y 3. Este número será la elección aleatoria del carácter a añadir.
  2. Si la elección ha resultado un:
      1. '1', entonces añade a tu cadena contraseña un carácter ASCII tomado aleatoriamente entre 97 y 123 (caracteres ASCII de las letras minúsculas).
      2. '2', entonces añade a tu cadena contraeña un carácter ASCII tomado aleatoriamente entre 65 y 91 (caracteres ASCII de las letras mayusculas). 
      3. '3', entonces añade a tu cadena contraeña un carácter ASCII tomado aleatoriamente entre 48 y 58 (caracteres ASCII de los números). 

    OJO: ¡No olvides pasarlo a tipo carácter antes de añadirlo a la cadena!
  3. Repite esta secuencia para toda la longitud de la cadena (ten en cuenta que cuando tengas creada la clase Password, la longitud te la dará el atributo longitud al que podrás acceder desde este propio método que pertenecerá a la misma clase).

Puedes ayudarte del ejercicio realizado en el punto 4 del apartado 3.

Lumen dice ¿Necesitas un poco de ayuda?

  1. Utiliza la biblioteca random para la generación de números aleatorios.
  2. Utiliza la biblioteca math para obtener la parte entera de un número aleatorio y conformar las opciones y los números ASCII.
  3. Consuta la tabla de caracterres ASCII aquí.
  4. Recuerda que para convertir un número a su correspondiente carácter ASCII debes usar la función char().

4. Concretamos el objetivo principal

Imagen de un brazo fuerteA continuación vas a crear la función que es objetivo principal del programa: la función que comprueba la fortaleza de la contraseña generada mediante el método anterior. No olvides que esta función, que se llamará esFuerte() formará parte de la clase y tendrá acceso a la contraseña generada y almacenada en el objeto.

El modo de operación que debes programar es el siguiente:

  • La función accederá a la contraseña generada en el objeto y devolverá un valor de tipo bool (booleano), que tendrá los valores:
    • 1 si la contraseña es fuerte.
    • 0 si la contraseña es débil.
  • El criterio de fortaleza que tendrás que comprobar es el siguiente: Una contraseña la consideraremos fuerte si tiene una longitud superior a 5 caracteres y si contiene al menos: más de una minúscula y más de dos mayúsculas.

¡Valor y a ello!

5. Definimos la estrategia

Conocidos los atributos y los métodos que tendrá nuestro objeto de clase Password, ¡es hora de codificarlo completo! Ya has definido sus componentes, e incluso has programado los dos métodos más complejos que contiene. Es la hora de unificarlo todo y definir nuestra clase que dará lugar a los objetos Password del programa principal:

En esta tarea vas a codificar la clase Password completa:

  • Define los atributos y los métodos según lo que has trabajado en los ejercicios anteriores.
  • Crea un constructor para la clase teniendo en cuenta las especificaciones que trabajaste en el punto 7 del apartado 4.1 y las adaptaciones del punto 4 del apartado 4.2.

6. Especializamos la misión

Imagen de una puerta con doble candadoYa ha quedado generada la clase Password. Es el momento de dar la opción de tener una contraseña especialmente segura. Recuerda que en las especificaciones del programa se indicaba la posibilidad de tener contraseñas especialmente seguras que den al usuario la posibilidad de obtener contraseñas generadas con un más amplio juego de caracteres:

  • La principal diferencia con la clase ya existente es que al generar estas contraseñas de clase Strong_password deberás ampliar el juego de caracteres utilizados y añadir al método creado los caracteres que se encuentran en los rangos 33 a 47 y 123 a 125.
  • Ahora, una contraseña segura se considerará aquella que teniedo una longitud mínima de 8 caracteres, tenga al menos una mayúscula, una minúscula y un carácter especial.
  • Crea un nuevo fichero en tu proyecto Pycharm para contener a esta nueva clase. Recuerda que si deseas utilizar código perteneciante al anterior fichero trabajado deberás importarlo en este nuevo fichero al principio del mismo.
  • Escribe una entrada en tu diario de clase del curso indicando: ¿Qué propiedad de la POO has utilizado en esta nueva clase?¿Qué ventaja te ha proporcionado utilizarla?

7. Ponemos en marcha el plan de seguridad

Ha llegado el momento de crear el programa principal y probar toda nuestra estructura de clases: integra y unifica. Para ello:

Dibujo de varias personas validando módulos

  • Crea un nuevo fichero en tu proyecto que contendrá este programa principal main(). no olvides importar todo lo necesario al principio del mismo.
  • Dicho programa te permitirá probar las clases que has codificado creando sus correspondientes objetos.
  • Crea en él una matriz que almacenará en su primera columna 5 contraseñas y en la segunda la fortaleza de las mismas (Sí o No, 1 o 0).
  • Crea una segunda matriz que realice lo mismo pero con contraseñas especialmente seguras.
  • Finalmente, muestra por pantalla ambas matrices de contraseñas.
  • De la comparación de la fostaleza de ambos tipos de contraseñas generadas, ¿qué conclusiones sacas respecto a la ventaja de generar automáticmaente las contraseñas?¿Cuál de los dos tipos crees que debería utilizarse para el usuario medio? Plasma tus reflexiones en tu diario de aprendizaje de la materia.

Reto finalizado

¡Reto finalizado! ¿Cómo te sientes? ¿Te has dado cuenta de la cantidad de cosas que has tenido que hacer para completar las actividades?

Al realizar estas actividades has tenido que poner en juego todo lo que sabes. A veces para aprender tenemos que trabajar de forma constante. Cuando nos esforzamos mucho nuestro trabajo es valorado por nuestros profes y familiares. Pero lo más importante es que nos sentimos muy felices por el trabajo realizado.

Debes saber que aunque no hayas podido realizar el reto completo sin ayuda has alcanzado un gran nivel llegando hasta aquí, ¡la POO no es fácil! Y, sobre todo, si comienzas ahora tu andadura en ella. No olvides consultar con tu profesorado y tus compañeros y compañeras de clase todas las dificultades y dudas que te surja. Y si se te ha dado genial...¡no dudes entonces en ayudar!

¡Cuánto has aprendido!

Te animo a que sigas trabajando para que puedas aprender y seguir mejorando.